LMDZPedia
LMDZPedia
http://lmdz-forge.lmd.jussieu.fr/mediawiki/LMDZPedia/index.php/Accueil
MediaWiki 1.27.7
first-letter
Média
Spécial
Discussion
Utilisateur
Discussion utilisateur
LMDZPedia
Discussion LMDZPedia
Fichier
Discussion fichier
MediaWiki
Discussion MediaWiki
Modèle
Discussion modèle
Aide
Discussion aide
Catégorie
Discussion catégorie
Gadget
Gadget talk
Gadget definition
Gadget definition talk
Accueil
0
1
1
2020-10-17T16:50:34Z
MediaWiki default
0
wikitext
text/x-wiki
<strong>MediaWiki a été installé.</strong>
Consultez le [//meta.wikimedia.org/wiki/Help:Contents/fr Guide de l’utilisateur] pour plus d’informations sur l’utilisation de ce logiciel de wiki.
== Pour démarrer ==
* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Liste des paramètres de configuration]
* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/fr Questions courantes sur MediaWiki]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Liste de discussion sur les distributions de MediaWiki]
* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Adaptez MediaWiki dans votre langue]
* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Apprendre comment lutter contre le pourriel dans votre wiki]
cda00254ef04d864e20adba5d4e38c2d2feef2a8
10
1
2020-11-16T11:30:25Z
Lfairhead
1
wikitext
text/x-wiki
= LMDZPedia =
=== Welcome to the front page of LMDZPedia, documentation, knowledge database for the LMD Atmospheric General Circulation Model LMDZ ===
Consultez le [//meta.wikimedia.org/wiki/Help:Contents/fr Guide de l’utilisateur] pour plus d’informations sur l’utilisation de ce logiciel de wiki.
== Pour démarrer ==
* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Liste des paramètres de configuration]
* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/fr Questions courantes sur MediaWiki]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Liste de discussion sur les distributions de MediaWiki]
* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Adaptez MediaWiki dans votre langue]
* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Apprendre comment lutter contre le pourriel dans votre wiki]
6e3dca242b1da08285b791305324f1ff246faab2
11
10
2020-11-16T11:32:41Z
Lfairhead
1
wikitext
text/x-wiki
= LMDZPedia =
=== Welcome to the front page of LMDZPedia, documentation, knowledge database for the LMD Atmospheric General Circulation Model LMDZ ===
[[Média:lmdzpedia.png]]
Consultez le [//meta.wikimedia.org/wiki/Help:Contents/fr Guide de l’utilisateur] pour plus d’informations sur l’utilisation de ce logiciel de wiki.
== Pour démarrer ==
* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Liste des paramètres de configuration]
* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/fr Questions courantes sur MediaWiki]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Liste de discussion sur les distributions de MediaWiki]
* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Adaptez MediaWiki dans votre langue]
* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Apprendre comment lutter contre le pourriel dans votre wiki]
8cb7e56bd2c106744f759a4e1a435d6816432f0c
12
11
2020-11-16T11:33:08Z
Lfairhead
1
wikitext
text/x-wiki
= LMDZPedia =
=== Welcome to the front page of LMDZPedia, documentation, knowledge database for the LMD Atmospheric General Circulation Model LMDZ ===
[[Média:Lmdzpedia.png]]
Consultez le [//meta.wikimedia.org/wiki/Help:Contents/fr Guide de l’utilisateur] pour plus d’informations sur l’utilisation de ce logiciel de wiki.
== Pour démarrer ==
* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Liste des paramètres de configuration]
* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/fr Questions courantes sur MediaWiki]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Liste de discussion sur les distributions de MediaWiki]
* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Adaptez MediaWiki dans votre langue]
* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Apprendre comment lutter contre le pourriel dans votre wiki]
7885d21b98d4fa63c7446851301f22411f425445
14
12
2020-11-16T11:34:13Z
Lfairhead
1
wikitext
text/x-wiki
= LMDZPedia =
=== Welcome to the front page of LMDZPedia, documentation, knowledge database for the LMD Atmospheric General Circulation Model LMDZ ===
[[File:Lmdzpedia.png]]
Consultez le [//meta.wikimedia.org/wiki/Help:Contents/fr Guide de l’utilisateur] pour plus d’informations sur l’utilisation de ce logiciel de wiki.
== Pour démarrer ==
* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Liste des paramètres de configuration]
* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/fr Questions courantes sur MediaWiki]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Liste de discussion sur les distributions de MediaWiki]
* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Adaptez MediaWiki dans votre langue]
* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Apprendre comment lutter contre le pourriel dans votre wiki]
37deead6f574b187506bed18e0328255f1f4c174
15
14
2020-11-16T11:36:24Z
Lfairhead
1
wikitext
text/x-wiki
= LMDZPedia =
=== Welcome to the front page of LMDZPedia, documentation, knowledge database for the LMD Atmospheric General Circulation Model LMDZ ===
[[File:Lmdzpedia.png]]
''The ultimate LMDZ knowledge database''
Consultez le [//meta.wikimedia.org/wiki/Help:Contents/fr Guide de l’utilisateur] pour plus d’informations sur l’utilisation de ce logiciel de wiki.
== Pour démarrer ==
* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Liste des paramètres de configuration]
* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/fr Questions courantes sur MediaWiki]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Liste de discussion sur les distributions de MediaWiki]
* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Adaptez MediaWiki dans votre langue]
* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Apprendre comment lutter contre le pourriel dans votre wiki]
fbac580d1229cde9675b86c6fcdc9187026151fc
16
15
2020-11-16T11:39:59Z
Lfairhead
1
wikitext
text/x-wiki
= LMDZPedia =
=== Welcome to the front page of LMDZPedia, documentation, knowledge database for the LMD Atmospheric General Circulation Model LMDZ ===
[[File:Lmdzpedia.png]]
''The ultimate LMDZ knowledge database''
[//lmdz-forge.lmd.jussieu.fr/mediawiki/index.php/Sp%c3%a9cial:Toutes_les_pages Toutes les pages]
Consultez le [//meta.wikimedia.org/wiki/Help:Contents/fr Guide de l’utilisateur] pour plus d’informations sur l’utilisation de ce logiciel de wiki.
== Pour démarrer ==
* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Liste des paramètres de configuration]
* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/fr Questions courantes sur MediaWiki]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Liste de discussion sur les distributions de MediaWiki]
* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Adaptez MediaWiki dans votre langue]
* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Apprendre comment lutter contre le pourriel dans votre wiki]
06e490ddc9ccff1917e90c05547a5b19e4644c29
17
16
2020-11-16T11:41:13Z
Lfairhead
1
wikitext
text/x-wiki
= LMDZPedia =
=== Welcome to the front page of LMDZPedia, documentation, knowledge database for the LMD Atmospheric General Circulation Model LMDZ ===
[[File:Lmdzpedia.png]]
''The ultimate LMDZ knowledge database''
[//lmdz-forge.lmd.jussieu.fr/mediawiki/index.php/Sp%c3%a9cial:Toutes_les_pages Toutes les pages]
== Pour démarrer ==
Consultez le [//meta.wikimedia.org/wiki/Help:Contents/fr Guide de l’utilisateur] pour plus d’informations sur l’utilisation de ce logiciel de wiki.
* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Liste des paramètres de configuration]
* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/fr Questions courantes sur MediaWiki]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Liste de discussion sur les distributions de MediaWiki]
* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Adaptez MediaWiki dans votre langue]
* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Apprendre comment lutter contre le pourriel dans votre wiki]
b934fa6e33c82aadb4060597774977bfb616a6a7
18
17
2020-11-16T11:43:16Z
Lfairhead
1
wikitext
text/x-wiki
= LMDZPedia =
=== Welcome to the front page of LMDZPedia, documentation, knowledge database for the LMD Atmospheric General Circulation Model LMDZ ===
[[File:Lmdzpedia.png]]
''The ultimate LMDZ knowledge database''
[//lmdz-forge.lmd.jussieu.fr/mediawiki/index.php/Sp%c3%a9cial:Toutes_les_pages Toutes les pages]
[[Sp%c3%a9cial:Toutes_les_pages]]
== Pour démarrer ==
Consultez le [//meta.wikimedia.org/wiki/Help:Contents/fr Guide de l’utilisateur] pour plus d’informations sur l’utilisation de ce logiciel de wiki.
* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Liste des paramètres de configuration]
* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/fr Questions courantes sur MediaWiki]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Liste de discussion sur les distributions de MediaWiki]
* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Adaptez MediaWiki dans votre langue]
* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Apprendre comment lutter contre le pourriel dans votre wiki]
c721b915485b13e6fe32265c5e9d1aeb49937d63
19
18
2020-11-16T11:45:19Z
Lfairhead
1
wikitext
text/x-wiki
= LMDZPedia =
=== Welcome to the front page of LMDZPedia, documentation, knowledge database for the LMD Atmospheric General Circulation Model LMDZ ===
[[File:Lmdzpedia.png]]
''The ultimate LMDZ knowledge database''
[[Sp%c3%a9cial:Toutes_les_pages]]
== Pour démarrer ==
Consultez le [//meta.wikimedia.org/wiki/Help:Contents/fr Guide de l’utilisateur] pour plus d’informations sur l’utilisation de ce logiciel de wiki.
* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Liste des paramètres de configuration]
* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/fr Questions courantes sur MediaWiki]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Liste de discussion sur les distributions de MediaWiki]
* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Adaptez MediaWiki dans votre langue]
* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Apprendre comment lutter contre le pourriel dans votre wiki]
a5e9bc29f56f1509df0fa0187fac4aaa36cdf895
31
19
2021-01-22T21:08:08Z
Lfairhead
1
wikitext
text/x-wiki
= LMDZPedia =
=== Welcome to the front page of LMDZPedia, documentation, knowledge database for the LMD Atmospheric General Circulation Model LMDZ ===
[[File:Lmdzpedia.png]]
''The ultimate LMDZ knowledge database''
[[Sp%c3%a9cial:Toutes_les_pages|Index des pages du site]]
[[Sp%c3%a9cial:Catégories|Index des catégories du site]]
== Pour démarrer ==
Consultez le [//meta.wikimedia.org/wiki/Help:Contents/fr Guide de l’utilisateur] pour plus d’informations sur l’utilisation de ce logiciel de wiki.
* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Liste des paramètres de configuration]
* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/fr Questions courantes sur MediaWiki]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Liste de discussion sur les distributions de MediaWiki]
* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Adaptez MediaWiki dans votre langue]
* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Apprendre comment lutter contre le pourriel dans votre wiki]
20a501aa5acd81ba8f7b22d5ae4ae54fe9a2f54e
32
31
2021-01-22T21:09:51Z
Lfairhead
1
wikitext
text/x-wiki
= LMDZPedia =
=== Welcome to the front page of LMDZPedia, documentation, knowledge database for the LMD Atmospheric General Circulation Model LMDZ ===
[[File:Lmdzpedia.png]]
''The ultimate LMDZ knowledge database''
[[Sp%c3%a9cial:Toutes_les_pages|Index des pages du site / Index of all pages on the site]]
[[Sp%c3%a9cial:Catégories|Index des catégories du site / Index of all categories on the site]]
== Pour démarrer ==
Consultez le [//meta.wikimedia.org/wiki/Help:Contents/fr Guide de l’utilisateur] pour plus d’informations sur l’utilisation de ce logiciel de wiki.
* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Liste des paramètres de configuration]
* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/fr Questions courantes sur MediaWiki]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Liste de discussion sur les distributions de MediaWiki]
* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Adaptez MediaWiki dans votre langue]
* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Apprendre comment lutter contre le pourriel dans votre wiki]
54d6847113540afd9d84d00732b78230ab41a5fa
Critère de CFL pour la verticale
0
2
2
2020-10-17T20:32:16Z
Lfairhead
1
Page créée avec « == Critère de Courant == Les messages : "On viole le CFL Vertical" ne sont pas anormaux. Ils indiquent qu'on advecte verticalement plus que le contenu d'une maille. C... »
wikitext
text/x-wiki
== Critère de Courant ==
Les messages : "On viole le CFL Vertical" ne sont pas anormaux. Ils indiquent qu'on advecte verticalement plus que le contenu d'une maille. Cette advection avec CFL>1 marche. Le message indique que le modèle est "agité" et que, si le nombre de points concernés devenait grand, la question pourrait se poser de réduire le pas de temps. En effet, le traitement spécifique fait pour CFL>1 peut ralentir le code.
18a76200f316747dc3f8e016479f26c47d093e64
29
2
2021-01-22T21:03:07Z
Lfairhead
1
wikitext
text/x-wiki
== Critère de Courant ==
Les messages : "On viole le CFL Vertical" ne sont pas anormaux. Ils indiquent qu'on advecte verticalement plus que le contenu d'une maille. Cette advection avec CFL>1 marche. Le message indique que le modèle est "agité" et que, si le nombre de points concernés devenait grand, la question pourrait se poser de réduire le pas de temps. En effet, le traitement spécifique fait pour CFL>1 peut ralentir le code.
[[Category:Dynamique]]
f08697d65962ecdb728cfdc5661b3e236dbdda39
Halos
0
3
3
2020-10-17T21:27:48Z
Lfairhead
1
Page créée avec « Il faut se méfier car avec les découpages en domaines MPI, si on regarde dans un halo à un moment avant qu'il soit correctement rempli, alors on peut y trouver n'impo... »
wikitext
text/x-wiki
Il faut se méfier car avec les découpages en domaines MPI, si on regarde dans un halo à un
moment avant qu'il soit correctement rempli, alors on peut y trouver n'importe quoi.
Un peu de nomenclature:
ijb_u => "ij": indice linéaire (grille horizontale) "b": begin (donc indice de début du domaine) "_u": grille U
ije_u => "ij": indice linéaire (grille horizontale) "e": end (donc indice de fin du domaine) "_u": grille U
ijb_v => "ij": indice linéaire (grille horizontale) "b": begin (donc indice de début du domaine) "_v": grille V
ije_v => "ij": indice linéaire (grille horizontale) "e": end (donc indice de fin du domaine) "_v": grille V
Ces bornes incluent les halos, alors que les ij_begin et ij_end non (à vérifier; c.f. parallel_lmdz.F90). Les scalaires, qui ne sont techniquement pas sur la grille "U", sont
indicés comme sur une grille U puisque la grille scalaire est de la même forme.
Les routines Register_SwapField servent à enregistrer les valeurs aux frontières internes de chaque domaine pour pouvoir ensuite les transmettre aux voisins qui en ont
besoin pour remplir leurs halos (frontières externes). Donc pour ce qui est de la différence entre ps_dyn et ps dans call_calfis, les halos ne sont pas à jour dans ps_dyn, alors qu'ils le sont dans ps, après appel à Register_SwapField.
7600f8e59dfff989ed750ab694f48d8e74167a92
39
3
2021-01-22T21:17:52Z
Lfairhead
1
wikitext
text/x-wiki
Il faut se méfier car avec les découpages en domaines MPI, si on regarde dans un halo à un
moment avant qu'il soit correctement rempli, alors on peut y trouver n'importe quoi.
Un peu de nomenclature:
ijb_u => "ij": indice linéaire (grille horizontale) "b": begin (donc indice de début du domaine) "_u": grille U
ije_u => "ij": indice linéaire (grille horizontale) "e": end (donc indice de fin du domaine) "_u": grille U
ijb_v => "ij": indice linéaire (grille horizontale) "b": begin (donc indice de début du domaine) "_v": grille V
ije_v => "ij": indice linéaire (grille horizontale) "e": end (donc indice de fin du domaine) "_v": grille V
Ces bornes incluent les halos, alors que les ij_begin et ij_end non (à vérifier; c.f. parallel_lmdz.F90). Les scalaires, qui ne sont techniquement pas sur la grille "U", sont
indicés comme sur une grille U puisque la grille scalaire est de la même forme.
Les routines Register_SwapField servent à enregistrer les valeurs aux frontières internes de chaque domaine pour pouvoir ensuite les transmettre aux voisins qui en ont
besoin pour remplir leurs halos (frontières externes). Donc pour ce qui est de la différence entre ps_dyn et ps dans call_calfis, les halos ne sont pas à jour dans ps_dyn, alors qu'ils le sont dans ps, après appel à Register_SwapField.
[[Category:Parallel]]
b030e5d1c25baf47b7576ec579f9be07ec3f6cf1
LMDZ sur 2 processus
0
4
4
2020-10-17T21:32:12Z
Lfairhead
1
Page créée avec « == Parallélisation == Si on exécute LMDZ en parallèle sur 2 processus, on n'a pas besoin d'ajuster le fichier "Bands...", la meilleure répartition est simplement la d... »
wikitext
text/x-wiki
== Parallélisation ==
Si on exécute LMDZ en parallèle sur 2 processus, on n'a pas besoin d'ajuster le fichier "Bands...", la meilleure répartition est simplement la division du domaine en deux parties de tailles égales. Le fichier Bands n'a donc pas besoin d'être présent.
42fe1a6a11e2eb94993b120aa0f17b24d45e85f1
40
4
2021-01-22T21:18:36Z
Lfairhead
1
/* Parallélisation */
wikitext
text/x-wiki
== Parallélisation ==
Si on exécute LMDZ en parallèle sur 2 processus, on n'a pas besoin d'ajuster le fichier "Bands...", la meilleure répartition est simplement la division du domaine en deux parties de tailles égales. Le fichier Bands n'a donc pas besoin d'être présent.
[[Category:parallel]]
d88cb2fc8b48b051a1dea897b61cda5199b72f64
Albédo avec bucket
0
5
5
2020-10-17T21:39:35Z
Lfairhead
1
Page créée avec « Le passage d'Orchidée à Bucket a tendance à beaucoup refroidir. On peut le comprendre en regardant les cartes d'albédo continental et la paramétrisation de la neig... »
wikitext
text/x-wiki
Le passage d'Orchidée à Bucket a tendance à beaucoup refroidir. On peut le comprendre en regardant les cartes d'albédo continental et la paramétrisation de la neige (procédure albsno). Comme c'est du sol nu partout, à la moindre poudrée on se retrouve avec un albédo de 0,8 sur de grandes mailles.
Quelques pistes pour modifier ce comportement :
* dans albsno, diminuer veget (défaut 1 partout soit sol nu)
* fraction de neige en cas d'épaisseur faible : défaut
zfra(i) = MAX(0.0,MIN(1.0, snow(i)/(snow(i)+10.)))
soit couverture de 50% de la maille avec 3 cm de neige en moyenne (en comptant une masse volumique de la neige de 300 kg m-3 environ). On peut augmenter ce 10 à 50 par exemple.
* jouer sur l'âge de la neige (agesno) pour ne pas remettre à "100% neige fraiche" dès qu'il tombe qqch.
agesno(i) = (agesno(i) + (1.-agesno(i)/50.)*dtime/86400.)&
* EXP(-1.*MAX(0.0,precip_snow(i))*dtime/0.3)
Ce qui correspond à remettre agesno à 0 avec une hauteur caractéristique de 1mm d'épaisseur tombée. J'ai remplacé ce 0.3 par 5.
f3ddf1844bfeabea455411a89715e721986b99bc
33
5
2021-01-22T21:13:19Z
Lfairhead
1
wikitext
text/x-wiki
Le passage d'Orchidée à Bucket a tendance à beaucoup refroidir. On peut le comprendre en regardant les cartes d'albédo continental et la paramétrisation de la neige (procédure albsno). Comme c'est du sol nu partout, à la moindre poudrée on se retrouve avec un albédo de 0,8 sur de grandes mailles.
Quelques pistes pour modifier ce comportement :
* dans albsno, diminuer veget (défaut 1 partout soit sol nu)
* fraction de neige en cas d'épaisseur faible : défaut
zfra(i) = MAX(0.0,MIN(1.0, snow(i)/(snow(i)+10.)))
soit couverture de 50% de la maille avec 3 cm de neige en moyenne (en comptant une masse volumique de la neige de 300 kg m-3 environ). On peut augmenter ce 10 à 50 par exemple.
* jouer sur l'âge de la neige (agesno) pour ne pas remettre à "100% neige fraiche" dès qu'il tombe qqch.
agesno(i) = (agesno(i) + (1.-agesno(i)/50.)*dtime/86400.)&
* EXP(-1.*MAX(0.0,precip_snow(i))*dtime/0.3)
Ce qui correspond à remettre agesno à 0 avec une hauteur caractéristique de 1mm d'épaisseur tombée. J'ai remplacé ce 0.3 par 5.
[[Category:Physique]]
[[Category:HowTo]]
e692795e2b9898ba406f38034471881b0fca3b71
ExempleMaths
0
6
6
2020-11-14T16:17:52Z
Lfairhead
1
Page créée avec « <!-- some LaTeX macros we want to use: --> $$\newcommand{\Re}{\mathrm{Re}\,} \newcommand{\pFq}[5]{{}_{#1}\mathrm{F}_{#2} \left( \genfrac{}{}{0pt}{}{#3}{#4} \bigg| {#5} \ri... »
wikitext
text/x-wiki
<!-- some LaTeX macros we want to use: -->
$$\newcommand{\Re}{\mathrm{Re}\,}
\newcommand{\pFq}[5]{{}_{#1}\mathrm{F}_{#2} \left( \genfrac{}{}{0pt}{}{#3}{#4} \bigg| {#5} \right)}$$
We consider, for various values of $$s$$, the $$n$$-dimensional integral
\begin{align}
\label{def:Wns}
W_n (s)
&:=
\int_{[0, 1]^n}
\left| \sum_{k = 1}^n \mathrm{e}^{2 \pi \mathrm{i} \, x_k} \right|^s \mathrm{d}\boldsymbol{x}
\end{align}
which occurs in the theory of uniform random walk integrals in the plane,
where at each step a unit-step is taken in a random direction. As such,
the integral \eqref{def:Wns} expresses the $$s$$-th moment of the distance
to the origin after $$n$$ steps.
By experimentation and some sketchy arguments we quickly conjectured and
strongly believed that, for $$k$$ a nonnegative integer
\begin{align}
\label{eq:W3k}
W_3(k) &= \Re \, \pFq32{\frac12, -\frac k2, -\frac k2}{1, 1}{4}.
\end{align}
Appropriately defined, \eqref{eq:W3k} also holds for negative odd integers.
The reason for \eqref{eq:W3k} was long a mystery, but it will be explained
at the end of the paper.
df498e675bb86942d0d3d9bad139486ca6c11184
Eau Condensee Fisrtilp
0
7
7
2020-11-14T17:44:39Z
Lfairhead
1
Page créée avec « $$\newcommand{\Condl}{Conditions aux limites } \newcommand{\condl}{conditions aux limites } \newcommand{\cad}{c'est-\`a-dire } \newcommand{\Cad}{C'est-\`a-dire } \newcomma... »
wikitext
text/x-wiki
$$\newcommand{\Condl}{Conditions aux limites }
\newcommand{\condl}{conditions aux limites }
\newcommand{\cad}{c'est-\`a-dire }
\newcommand{\Cad}{C'est-\`a-dire }
\newcommand{\tem}{temp\'erature }
\newcommand{\tems}{temp\'eratures }
\newcommand{\Tpni}{T_{\text{p,ni}}}
\newcommand{\Tp}{T_{\text{p}}}
\newcommand{\qpni}{q_{\text{p,ni}}}
\newcommand{\qp}{q_{\text{p}}}
\newcommand{\qsati}{q_{\text{sat,i}}}
\newcommand{\qsat}{q_{\text{sat}}}
\newcommand{\hpni}{h_{\text{p,ni}}}
\newcommand{\hp}{h_{\text{p}}}
%*KEEP,mathwake,T=LATEX.
\newcommand{\nab}{\vec{\nabla}}
\newcommand{\V}{\vec{V}}
\newcommand{\Vt}{\vec{\tilde{V}}}
\newcommand{\F}{\vec{F}}
\newcommand{\NF}{\|\vec{F}\|}
\newcommand{\CD}{C_D}
\newcommand{\pt}{\tilde{p}}
\newcommand{\Dt}{\tilde{D}}
\newcommand{\thetat}{\tilde{\theta}}
\newcommand{\alphat}{\tilde{\alpha}}
\newcommand{\Mt}{\tilde{M}}
\newcommand{\rhot}{\tilde{\rho}}
\newcommand{\qt}{\tilde{q}}
\newcommand{\Tt}{\tilde{T}}
\newcommand{\wt}{\tilde{w}}
\newcommand{\wbar}{\overline{w}}
\newcommand{\ubar}{\overline{u}}
\newcommand{\vbar}{\overline{v}}
\newcommand{\qbar}{\overline{q_v}}
\newcommand{\omgb}{\overline{\omega}}
\newcommand{\omgwb}{\overline{\omega_w}}
\newcommand{\omgub}{\overline{\omega_u}}
\newcommand{\omgxb}{\overline{\omega_x}}
\newcommand{\thetab}{\overline{\theta}}
\newcommand{\qvb}{\overline{q_v}}
\newcommand{\qvwb}{\overline{q_{vw}}}
\newcommand{\qvxb}{\overline{q_{vx}}}
\newcommand{\qvw}{q_{vw}}
\newcommand{\qvx}{q_{vx}}
\newcommand{\thetawb}{\overline{\theta_w}}
\newcommand{\thetaub}{\overline{\theta_u}}
\newcommand{\thetaxb}{\overline{\theta_x}}
\newcommand{\uwb}{\overline{u_w}}
\newcommand{\uub}{\overline{u_u}}
\newcommand{\uxb}{\overline{u_x}}
\newcommand{\vwb}{\overline{v_w}}
\newcommand{\vub}{\overline{v_u}}
\newcommand{\vxb}{\overline{v_x}}
\newcommand{\vwhat}{\hat{v_w}}
\newcommand{\vuhat}{\hat{v_u}}
\newcommand{\vxhat}{\hat{v_x}}
\newcommand{\Kb}{\overline{K}}
\newcommand{\alphab}{\overline{\alpha}}
\newcommand{\alphawb}{\overline{\alpha_w}}
\newcommand{\alphaub}{\overline{\alpha_u}}
\newcommand{\alphaxb}{\overline{\alpha_x}}
\newcommand{\rhob}{\overline{\rho}}
\newcommand{\sigw}{\ensuremath{\sigma_w}}
\newcommand{\dlt}{\delta t}
\newcommand{\Xrz}{X_{r}}
\newcommand{\Xr}[1]{X_{r(#1)}}
\newcommand{\Xrpz}{X_{rp}}
\newcommand{\Xrp}[1]{X_{rp(#1)}}
\newcommand{\Xrvz}{X_{rv}}
\newcommand{\Xrv}[1]{X_{rv(#1)}}
\newcommand{\Xrhz}{\hat{X}_{r}}
\newcommand{\Xrh}[1]{\hat{X}_{r(#1)}}
%%%\newcommand{\dlts2}{\frac{\dlt}{2}}
\newcommand{\dsdlt}{\frac{2}{\dlt}}
\newcommand{\vphi}{\vec{\varphi}}
\newcommand{\veta}{\vec{\eta}}
\newcommand{\vtheta}{\vec{\theta}}
\newcommand{\veps}{\vec{\varepsilon}}
\newcommand{\delphi}{\vec{\delta \varphi}}
\newcommand{\vG}{\vec{G}}
\newcommand{\vf}{\vec{f}}
\newcommand{\n}{\vec{n}}
\newcommand{\rl}{\rho_{l}}
\newcommand{\rv}{\rho_{v}}
\newcommand{\vv}{\vec{V}_{v}}
\newcommand{\vl}{\vec{V}_{l}}
%%%\newcommand{\v}{\vec{V}}
\newcommand{\g}{\vec{g}}
\newcommand{\dsdt}{\frac {\partial }{\partial t}}
\newcommand{\dst}{\partial_t}
\newcommand{\dsp}{\partial_p}
\newcommand{\dsz}{\partial_z}
\newcommand{\dsy}{\partial_y}
\newcommand{\dsx}{\partial_x}
\newcommand{\dsth}{\partial_{\theta}}
\newcommand{\dsq}{\partial_q}
\newcommand{\dsv}{\partial_V}
\newcommand{\dalpha}{\delta \alpha}
\newcommand{\dw}{\delta w}
\newcommand{\dqv}{\delta q_v}
\newcommand{\dtheta}{\delta \theta}
\newcommand{\domg}{\delta \omega}
\newcommand{\domgcv}{\delta \omega^{\text{cv}}}
%%\newcommand{\domgtop}{\delta \omega_{\text{top}}}
\newcommand{\domgtop}{\delta \omega_{w}}
%%\newcommand{\domgupper}{\delta \omega_{\text{upper}}}
\newcommand{\domgupper}{\delta \omega_{h}}
%%\newcommand{\ptop}{p_{\text{top}}}
\newcommand{\ptop}{p_{w}}
%%\newcommand{\pupper}{p_{\text{upper}}}
\newcommand{\pupper}{p_{h}}
%%\newcommand{\htop}{h_{\text{top}}}
\newcommand{\htop}{h_{w}}
%%\newcommand{\hupper}{h_{\text{upper}}}
\newcommand{\hupper}{h_{h}}
\newcommand{\intw}{\int_{\Sigma_w}}
\newcommand{\intu}{\int_{\Sigma_u}}
\newcommand{\intx}{\int_{\Sigma_x}}
\newcommand{\inte}{\int_{\Sigma_e}}
\newcommand{\intp}{\int_{\Sigma'}}
\newcommand{\intgw}{\int_{\Gamma_{w,in}}}
\newcommand{\intgwp}{\int_{\Gamma_{w,in}^+}}
\newcommand{\intgwm}{\int_{\Gamma_{w,in}^-}}
\newcommand{\intg}{\int_{\Gamma}}
\newcommand{\intgp}{\int_{\Gamma'}}
\newcommand{\intgpe}{\int_{\Gamma'_e}}
\newcommand{\intgpu}{\int_{\Gamma'_u}}
\newcommand{\intgpx}{\int_{\Gamma'_x}}
\newcommand{\intgpw}{\int_{\Gamma'_w}}
\newcommand{\kgw}{k_{\text{gw}}}
\newcommand{\taugw}{\tau_{\text{gw}}}
\newcommand{\klift}{k_{\text{lift}}}
%%\newcommand{\kliftw}{k_{\text{lift,wk}}}
\newcommand{\kliftw}{\mathcal{E}_{\text{lift}}^{\text{wk}}}
\newcommand{\Eliftw}{\mathcal{E}_{\text{lift}}^{\text{wk}}}
\newcommand{\Pb}{\ensuremath{P_{\text{buoy}}}}
\newcommand{\Pliftw}{\ensuremath{P_{\text{lift}}^{\text{wk}}}}
\newcommand{\Pliftwh}{\ensuremath{\widehat{P_{\text{lift}}^{\text{wk}}}}}
\newcommand{\Pliftwp}{\ensuremath{\widetilde{P_{\text{lift}}^{\text{wk}}}}}
\newcommand{\LG}{\ensuremath{L_{\Gamma}}}
\newcommand{\LGh}{\ensuremath{\widehat{L_{\Gamma}}}}
\newcommand{\LGp}{\ensuremath{\widetilde{L_{\Gamma}}}}
\newcommand{\LGt}{\ensuremath{\widetilde{L_{\Gamma}}}}
\newcommand{\Dw}{\ensuremath{D_{\text{wk}}}}
\newcommand{\QI}{\ensuremath{Q_1}}
\newcommand{\DQI}{\ensuremath{\delta Q_1}}
\newcommand{\QIsat}{\ensuremath{Q_{1}^{\text{sat}}}}
\newcommand{\QIcvsat}{\ensuremath{Q_{1}^{\text{cv,sat}}}}
\newcommand{\QIunsat}{\ensuremath{Q_{1}^{\text{unsat}}}}
\newcommand{\QIcvunsat}{\ensuremath{Q_{1}^{\text{cv,unsat}}}}
\newcommand{\QIIsat}{\ensuremath{Q_{2}^{\text{sat}}}}
\newcommand{\QIIcvsat}{\ensuremath{Q_{2}^{\text{cv,sat}}}}
\newcommand{\QIIunsat}{\ensuremath{Q_{2}^{\text{unsat}}}}
\newcommand{\QIIcvunsat}{\ensuremath{Q_{2}^{\text{cv,unsat}}}}
\newcommand{\QIw}{\ensuremath{Q_{1,w}}}
\newcommand{\QIcvw}{\ensuremath{Q_{1,w}^{\text{cv}}}}
\newcommand{\QIx}{\ensuremath{Q_{1,x}}}
\newcommand{\QIcvx}{\ensuremath{Q_{1,x}^{\text{cv}}}}
\newcommand{\QIcv}{\ensuremath{Q_{1}^{\text{cv}}}}
\newcommand{\DQIcv}{\ensuremath{\delta Q_{1}^{\text{cv}}}}
\newcommand{\QIbl}{\ensuremath{Q_{1}^{\text{bl}}}}
\newcommand{\QIcl}{\ensuremath{Q_{1}^{\text{cl}}}}
\newcommand{\QIwk}{\ensuremath{Q_{1}^{\text{wk}}}}
\newcommand{\DQIwk}{\ensuremath{\delta Q_{1}^{\text{wk}}}}
\newcommand{\QIp}{\ensuremath{Q_{1,p}}}
\newcommand{\QIS}{\ensuremath{\mathcal{Q}_{1}^S}}
\newcommand{\QID}{\ensuremath{\mathcal{Q}_{1}^D}}
\newcommand{\QIT}{\ensuremath{\mathcal{Q}_{1}^T}}
\newcommand{\QIE}{\ensuremath{\mathcal{Q}_{1}^E}}
\newcommand{\QII}{\ensuremath{Q_2}}
\newcommand{\DQII}{\ensuremath{\delta Q_2}}
\newcommand{\QIIw}{\ensuremath{Q_{2,w}}}
\newcommand{\QIIcvw}{\ensuremath{Q_{2,w}^{\text{cv}}}}
\newcommand{\QIIx}{\ensuremath{Q_{2,x}}}
\newcommand{\QIIcvx}{\ensuremath{Q_{2,x}^{\text{cv}}}}
\newcommand{\QIIcv}{\ensuremath{Q_{2}^{\text{cv}}}}
\newcommand{\DQIIcv}{\ensuremath{\delta Q_{2}^{\text{cv}}}}
\newcommand{\QIIbl}{\ensuremath{Q_{2}^{\text{bl}}}}
\newcommand{\QIIcl}{\ensuremath{Q_{2}^{\text{cl}}}}
\newcommand{\QIIwk}{\ensuremath{Q_{2}^{\text{wk}}}}
\newcommand{\DQIIwk}{\ensuremath{\delta Q_{2}^{\text{wk}}}}
\newcommand{\QIIp}{\ensuremath{Q_{2,p}}}
\newcommand{\QIIS}{\ensuremath{\mathcal{Q}_{2}^S}}
\newcommand{\QIID}{\ensuremath{\mathcal{Q}_{2}^D}}
\newcommand{\QIIT}{\ensuremath{\mathcal{Q}_{2}^T}}
\newcommand{\QIIE}{\ensuremath{\mathcal{Q}_{2}^E}}
\newcommand{\Sig}{\ensuremath{\Sigma\;}}
\newcommand{\Sigp}{\ensuremath{\Sigma'\;}}
\newcommand{\Sigw}{\ensuremath{\Sigma_w\;}}
\newcommand{\Sige}{\ensuremath{\Sigma_e}}
\newcommand{\Sigu}{\ensuremath{\Sigma_u}}
\newcommand{\Sigx}{\ensuremath{\Sigma_x}}
\newcommand{\Wb}{\ensuremath{W_{\text{buoy}}}}
\newcommand{\Wbb}{\bar{\bar{W}}}
\newcommand{\wa}{\langle w\rangle}
\newcommand{\wpa}{\langle w'\rangle}
\newcommand{\wwa}{\langle w^2\rangle}
\newcommand{\wwwa}{\langle w^3\rangle}
\newcommand{\wwpa}{\langle w^{\prime\prime\prime 2}\rangle}$$
Le but de cette note est d'établir les formules menant à la détermination des quantités
d'eau condensées sous forme d'eau liquide et de glace dans le sous-programme Fisrtilp. La
principale difficulté réside dans le fait que la condensation dégage de la chaleur latente
et que $$\qsat$$ dépend de la température. Dans tous ces calculs, on considère une couche
atmosphérique sans condensat de température $$T$$ et d'humidité spécifique $$q$$ et on se
donne la fraction $$f$$ de la maille où se produit la condensation. Le principe est d'écrire
que l'énergie statique humide et la quantité d'eau totale sont conservées dans le
processus de condensation.
Dans la première version créée par Laurent Li, on suppose que seule la partie
nuageuse de la maille voit sa température augmenter du fait de la condensation. Alors le
système que l'on décrit présente des températures différentes dans le nuage et hors du
nuage.
Laurent Li résoud :
\begin{equation}
C_p T' \;+\; L_v \qsat(T') \;=\; C_p T \;+\; L_v q
\label{eq.init}
\end{equation}
étant entendu que cela s'applique à la partie nuageuse de la maille.
Nous voulons, au contraire, écrire que les températures sont toujours uniformisées
horizontalement très rapidement (et même on va supposer instantanément). En outre nous
allons généraliser les calculs au cas où de la condensation solide est présente et nous
allons profiter de l'occasion pour écrire des formules complètes prenant en compte la
variation des chaleurs latentes avec la température (voir dans l'annexe les formules donnant
l'énergie statique humide $$h$$).
== Écriture des équations de conservation ==
Soit donc $$f$$ la fraction nuageuse. On écrit que sur $$f$$ il y a condensation et que sur
$$(1-f)$$ il n'y a pas de changement de phase. On suppose connu le contenu massique total
d'eau $$q_n$$ (i.e. vapeur + liquide + glace) dans le nuage. En désignant par $$T'$$ la
température (uniforme) après condensation et par $$q"$$ l'humidité spécifique hors des
nuages, les énergies statiques massiques initiale $$h$$, dans le nuage $$h_n$$ et hors du
nuage $$h"$$ s'écrivent~:
\begin{equation}
\left \lbrace
\begin{array}{ll}
h_n &=\;[(1-q_n)C_{pd} + q_n C_l] T' + L_v \qsat - L_f q_i + gz \\
h" &=\;[(1-q")C_{pd} + q"C_l] T' + L_v q" + gz \\
h &=\;[(1-q)C_{pd} + q C_l] T + L_v q + gz \\
\end{array}
\right .
\end{equation}
où $$\qsat$$ désigne l'humidité saturante. Ce peut être l'humidité saturante à la
température $$T'$$ sur l'eau liquide ou sur la glace. A voir plus loin.
La conservation de l'énergie statique humide et de l'eau s'écrit~:
\begin{equation}
\left \lbrace
\begin{array}{ll}
f h_n + (1-f)h" &=\;h \\
f q_n + (1-f)q" &=\;q \\
\end{array}
\right .
\end{equation}
Ce qui donne~:
\begin{equation}
\left \lbrace
\begin{array}{l}
T'[C_{pd} + (f q_n + (1-f) q") (C_l-C_{pd})] + L_v [f \qsat + (1-f)q"] - L_f f q_i \\
\qquad \qquad = [C_{pd} + q (C_l-C_{pd})] T + L_v q \\
\\
q = f q_n + (1-f) q"\\
\end{array}
\right .
\end{equation}
Soit, en posant $$C_p = C_{pd} + (C_l-C_{pd}) q$$~:
\begin{equation}
\left \lbrace
\begin{array}{l}
C_p T' - f [L_v(q_n-\qsat) + L_f q_i] = C_p T \\
q = f q_n + (1-f) q"\\
\end{array}
\right .
\end{equation}
Maintenant nous supposons que la glace représente une fraction $$\gamma$$ du condensat~:
$$q_i = \gamma (q_n - \qsat)$$. Finalement les équations de conservation s'écrivent~:
\begin{equation}
\label{eq.conserv_fin}
\left \lbrace
\begin{array}{l}
C_p T' - f (L_v+\gamma L_f)(q_n-\qsat) = C_p T \\
q = f q_n + (1-f) q"\\
\end{array}
\right .
\end{equation}
== Mise en oeuvre ==
Nous supposons maintenant que $$\qsat$$ est égale à l'humidité saturante sur eau liquide
lorsqu'il n'y a pas de glace et à l'humidité saturante sur glace dès que la glace est
présente.
L'équation (\ref{eq.conserv_fin}) pour la température peut être écrite sous une forme
analogue à l'équation initiale (\ref{eq.init}) de Laurent Li~:
\begin{equation}
\label{eq.conserv_fin_lli}
C_p T' \;+\; f (L_v+\gamma L_f) \qsat(T')] \;=\; C_p T \;+\; f (L_v+\gamma L_f) q_n
\end{equation}
On constate que l'on passe de l'équation (\ref{eq.init}) à l'équation
(\ref{eq.conserv_fin_lli}) en remplaçant $$L_v$$ par $$f (L_v+\gamma L_f)$$ et $$q$$ par $$q_n$$.
L'itération convergeant vers $$T'$$ s'obtient ainsi directement à partir des formules de
Laurent~:
\begin{equation}
\displaystyle{
T'_{j+1}\;=\;T'_j\;+\;\frac{T-T'_j\;+\;\frac{f (L_v+\gamma L_f)}{C_p}[q_n\;-\;\qsat(T'_j)]}
{1\;+\;\frac{f (L_v+\gamma L_f)}{C_p}\partial_T\qsat(T'_j)} }
\label{eq.iter}
\end{equation}
L'expérience montre que cette itération converge assez vite, en 3 ou 4 passages. Elle va
fournir une valeur approchée $$T'_a$$ à partir de laquelle on peut calculer l'eau condensée~:
$$
c\;=\;f[q_n\;-\;\qsat(T'_a)]
$$
et les estimations finales de la température $$T'$$ et de l'humidité $$q'$$ telles que
l'énergie et l'eau soient exactement conservées~:
\begin{equation}
\left \lbrace
\begin{array}{l}
T'\;=\; T\;+\;\frac{L_v+\gamma L_f}{C_p}c \\
q'\;=\;q\;-\;c \\
\end{array}
\right .
\end{equation}
== Annexe: définitions des enthalpies et énergies statiques massiques ==
=== I - Enthalpies massiques~: ===
Grandeurs conservées dans les \underline{transformations adiabatiques
isobares}.
\begin{equation}
\begin{array}{ll}
\left \lbrace
\begin{array}{lll}
k &=& (1-q_t) k_d + q_v k_v + q_l k_l + q_i k_i \\
L_v(T) &=& k_v - k_l \\
L_s(T) &=& k_v - k_i\;, \quad L_f(T) = L_s(T)-L_v(T)\\
k_d &=& C_{pd} T \\
k_l &=& C_l T \\
k_i &=& C_i T \\
\end{array}
\right \rbrace & \left .
\begin{array}{l}
\rm{enthalpie} \\
k=[(1-q_t) C_{pd} +q_t C_l] T + L_v q_v - L_f q_i\\
\end{array} \right .
\end{array}
\end{equation}
Comme $$L_v-(C_{pv}-C_l)T = \rm{cste}$$,
l'enthalpie avec eau liquide $$k_w=k-q_t[L_v-(C_{pv}-C_l)T]$$
est aussi conservée dans les transformations adiabatiques isobares~:
$$
k_w = [(1-q_t) C_{pd} + q_t C_{pv}] T - L_v q_l - L_s q_i
$$
On peut faire le même genre de chose pour obtenir une expression sans $$q_i$$,
ce qui donne~: et comme $$L_f-(C_l-C_i)T = \rm{cste}$$, l'enthalpie (sans nom)
$$k_i=k-q_t[L_f-(C_l-C_i)T]$$ est aussi conservée dans les transformations
adiabatiques isobares~:
$$
k_i = [(1-q_t) C_{pd} + q_t C_i] T+ L_s q_v + L_f q_l
$$
=== II - Energies statiques~: ===
Grandeurs conservées dans les \\
\underline{transformations adiabatiques où le changement
de pression est purement hydrostatique}.
\begin{equation}
\begin{array}{ll}
\left .
\begin{array}{lll}
\rm{Adiabatisme :} & dk &\displaystyle{=\frac{dp}{\rho} }\\
& & \\
\rm{Hydrostasie :} & \displaystyle{\frac{dp}{\rho} }&= -g dz
\end{array}
\right \rbrace & \left .
\begin{array}{l}
dk + g dz = 0 \\
\end{array} \right .
\end{array}
\end{equation}
\begin{tabular}{ll}
Energie statique humide : &
$$h=[(1-q_t)C_{pd}+q_tC_l]T + L_v q_v - L_f q_i + gz$$ \\
& \\
Energie statique avec eau liquide : &
$$h_w=[(1-q_t)C_{pd}+q_tC_{pv}]T - L_vq_l - L_s q_i + gz$$ \\
& \\
Energie statique sans nom : &
$$h_i=[(1-q_t) C_{pd} + q_t C_i] T+ L_s q_v + L_f q_l + gz$$ \\
& \\
Energie statique sèche : & $$h_d=[(1-q)C_{pd}+qC_{pv}]T +gz$$ \\
(= $$h_w$$ avec $$q_l\;=\;0$$ et $$q_i\;=\;0$$) & \\
& \\
\end{tabular} \\
6275d401772c35b99ebb3e634814c26a73a8158a
36
7
2021-01-22T21:15:46Z
Lfairhead
1
wikitext
text/x-wiki
$$\newcommand{\Condl}{Conditions aux limites }
\newcommand{\condl}{conditions aux limites }
\newcommand{\cad}{c'est-\`a-dire }
\newcommand{\Cad}{C'est-\`a-dire }
\newcommand{\tem}{temp\'erature }
\newcommand{\tems}{temp\'eratures }
\newcommand{\Tpni}{T_{\text{p,ni}}}
\newcommand{\Tp}{T_{\text{p}}}
\newcommand{\qpni}{q_{\text{p,ni}}}
\newcommand{\qp}{q_{\text{p}}}
\newcommand{\qsati}{q_{\text{sat,i}}}
\newcommand{\qsat}{q_{\text{sat}}}
\newcommand{\hpni}{h_{\text{p,ni}}}
\newcommand{\hp}{h_{\text{p}}}
%*KEEP,mathwake,T=LATEX.
\newcommand{\nab}{\vec{\nabla}}
\newcommand{\V}{\vec{V}}
\newcommand{\Vt}{\vec{\tilde{V}}}
\newcommand{\F}{\vec{F}}
\newcommand{\NF}{\|\vec{F}\|}
\newcommand{\CD}{C_D}
\newcommand{\pt}{\tilde{p}}
\newcommand{\Dt}{\tilde{D}}
\newcommand{\thetat}{\tilde{\theta}}
\newcommand{\alphat}{\tilde{\alpha}}
\newcommand{\Mt}{\tilde{M}}
\newcommand{\rhot}{\tilde{\rho}}
\newcommand{\qt}{\tilde{q}}
\newcommand{\Tt}{\tilde{T}}
\newcommand{\wt}{\tilde{w}}
\newcommand{\wbar}{\overline{w}}
\newcommand{\ubar}{\overline{u}}
\newcommand{\vbar}{\overline{v}}
\newcommand{\qbar}{\overline{q_v}}
\newcommand{\omgb}{\overline{\omega}}
\newcommand{\omgwb}{\overline{\omega_w}}
\newcommand{\omgub}{\overline{\omega_u}}
\newcommand{\omgxb}{\overline{\omega_x}}
\newcommand{\thetab}{\overline{\theta}}
\newcommand{\qvb}{\overline{q_v}}
\newcommand{\qvwb}{\overline{q_{vw}}}
\newcommand{\qvxb}{\overline{q_{vx}}}
\newcommand{\qvw}{q_{vw}}
\newcommand{\qvx}{q_{vx}}
\newcommand{\thetawb}{\overline{\theta_w}}
\newcommand{\thetaub}{\overline{\theta_u}}
\newcommand{\thetaxb}{\overline{\theta_x}}
\newcommand{\uwb}{\overline{u_w}}
\newcommand{\uub}{\overline{u_u}}
\newcommand{\uxb}{\overline{u_x}}
\newcommand{\vwb}{\overline{v_w}}
\newcommand{\vub}{\overline{v_u}}
\newcommand{\vxb}{\overline{v_x}}
\newcommand{\vwhat}{\hat{v_w}}
\newcommand{\vuhat}{\hat{v_u}}
\newcommand{\vxhat}{\hat{v_x}}
\newcommand{\Kb}{\overline{K}}
\newcommand{\alphab}{\overline{\alpha}}
\newcommand{\alphawb}{\overline{\alpha_w}}
\newcommand{\alphaub}{\overline{\alpha_u}}
\newcommand{\alphaxb}{\overline{\alpha_x}}
\newcommand{\rhob}{\overline{\rho}}
\newcommand{\sigw}{\ensuremath{\sigma_w}}
\newcommand{\dlt}{\delta t}
\newcommand{\Xrz}{X_{r}}
\newcommand{\Xr}[1]{X_{r(#1)}}
\newcommand{\Xrpz}{X_{rp}}
\newcommand{\Xrp}[1]{X_{rp(#1)}}
\newcommand{\Xrvz}{X_{rv}}
\newcommand{\Xrv}[1]{X_{rv(#1)}}
\newcommand{\Xrhz}{\hat{X}_{r}}
\newcommand{\Xrh}[1]{\hat{X}_{r(#1)}}
%%%\newcommand{\dlts2}{\frac{\dlt}{2}}
\newcommand{\dsdlt}{\frac{2}{\dlt}}
\newcommand{\vphi}{\vec{\varphi}}
\newcommand{\veta}{\vec{\eta}}
\newcommand{\vtheta}{\vec{\theta}}
\newcommand{\veps}{\vec{\varepsilon}}
\newcommand{\delphi}{\vec{\delta \varphi}}
\newcommand{\vG}{\vec{G}}
\newcommand{\vf}{\vec{f}}
\newcommand{\n}{\vec{n}}
\newcommand{\rl}{\rho_{l}}
\newcommand{\rv}{\rho_{v}}
\newcommand{\vv}{\vec{V}_{v}}
\newcommand{\vl}{\vec{V}_{l}}
%%%\newcommand{\v}{\vec{V}}
\newcommand{\g}{\vec{g}}
\newcommand{\dsdt}{\frac {\partial }{\partial t}}
\newcommand{\dst}{\partial_t}
\newcommand{\dsp}{\partial_p}
\newcommand{\dsz}{\partial_z}
\newcommand{\dsy}{\partial_y}
\newcommand{\dsx}{\partial_x}
\newcommand{\dsth}{\partial_{\theta}}
\newcommand{\dsq}{\partial_q}
\newcommand{\dsv}{\partial_V}
\newcommand{\dalpha}{\delta \alpha}
\newcommand{\dw}{\delta w}
\newcommand{\dqv}{\delta q_v}
\newcommand{\dtheta}{\delta \theta}
\newcommand{\domg}{\delta \omega}
\newcommand{\domgcv}{\delta \omega^{\text{cv}}}
%%\newcommand{\domgtop}{\delta \omega_{\text{top}}}
\newcommand{\domgtop}{\delta \omega_{w}}
%%\newcommand{\domgupper}{\delta \omega_{\text{upper}}}
\newcommand{\domgupper}{\delta \omega_{h}}
%%\newcommand{\ptop}{p_{\text{top}}}
\newcommand{\ptop}{p_{w}}
%%\newcommand{\pupper}{p_{\text{upper}}}
\newcommand{\pupper}{p_{h}}
%%\newcommand{\htop}{h_{\text{top}}}
\newcommand{\htop}{h_{w}}
%%\newcommand{\hupper}{h_{\text{upper}}}
\newcommand{\hupper}{h_{h}}
\newcommand{\intw}{\int_{\Sigma_w}}
\newcommand{\intu}{\int_{\Sigma_u}}
\newcommand{\intx}{\int_{\Sigma_x}}
\newcommand{\inte}{\int_{\Sigma_e}}
\newcommand{\intp}{\int_{\Sigma'}}
\newcommand{\intgw}{\int_{\Gamma_{w,in}}}
\newcommand{\intgwp}{\int_{\Gamma_{w,in}^+}}
\newcommand{\intgwm}{\int_{\Gamma_{w,in}^-}}
\newcommand{\intg}{\int_{\Gamma}}
\newcommand{\intgp}{\int_{\Gamma'}}
\newcommand{\intgpe}{\int_{\Gamma'_e}}
\newcommand{\intgpu}{\int_{\Gamma'_u}}
\newcommand{\intgpx}{\int_{\Gamma'_x}}
\newcommand{\intgpw}{\int_{\Gamma'_w}}
\newcommand{\kgw}{k_{\text{gw}}}
\newcommand{\taugw}{\tau_{\text{gw}}}
\newcommand{\klift}{k_{\text{lift}}}
%%\newcommand{\kliftw}{k_{\text{lift,wk}}}
\newcommand{\kliftw}{\mathcal{E}_{\text{lift}}^{\text{wk}}}
\newcommand{\Eliftw}{\mathcal{E}_{\text{lift}}^{\text{wk}}}
\newcommand{\Pb}{\ensuremath{P_{\text{buoy}}}}
\newcommand{\Pliftw}{\ensuremath{P_{\text{lift}}^{\text{wk}}}}
\newcommand{\Pliftwh}{\ensuremath{\widehat{P_{\text{lift}}^{\text{wk}}}}}
\newcommand{\Pliftwp}{\ensuremath{\widetilde{P_{\text{lift}}^{\text{wk}}}}}
\newcommand{\LG}{\ensuremath{L_{\Gamma}}}
\newcommand{\LGh}{\ensuremath{\widehat{L_{\Gamma}}}}
\newcommand{\LGp}{\ensuremath{\widetilde{L_{\Gamma}}}}
\newcommand{\LGt}{\ensuremath{\widetilde{L_{\Gamma}}}}
\newcommand{\Dw}{\ensuremath{D_{\text{wk}}}}
\newcommand{\QI}{\ensuremath{Q_1}}
\newcommand{\DQI}{\ensuremath{\delta Q_1}}
\newcommand{\QIsat}{\ensuremath{Q_{1}^{\text{sat}}}}
\newcommand{\QIcvsat}{\ensuremath{Q_{1}^{\text{cv,sat}}}}
\newcommand{\QIunsat}{\ensuremath{Q_{1}^{\text{unsat}}}}
\newcommand{\QIcvunsat}{\ensuremath{Q_{1}^{\text{cv,unsat}}}}
\newcommand{\QIIsat}{\ensuremath{Q_{2}^{\text{sat}}}}
\newcommand{\QIIcvsat}{\ensuremath{Q_{2}^{\text{cv,sat}}}}
\newcommand{\QIIunsat}{\ensuremath{Q_{2}^{\text{unsat}}}}
\newcommand{\QIIcvunsat}{\ensuremath{Q_{2}^{\text{cv,unsat}}}}
\newcommand{\QIw}{\ensuremath{Q_{1,w}}}
\newcommand{\QIcvw}{\ensuremath{Q_{1,w}^{\text{cv}}}}
\newcommand{\QIx}{\ensuremath{Q_{1,x}}}
\newcommand{\QIcvx}{\ensuremath{Q_{1,x}^{\text{cv}}}}
\newcommand{\QIcv}{\ensuremath{Q_{1}^{\text{cv}}}}
\newcommand{\DQIcv}{\ensuremath{\delta Q_{1}^{\text{cv}}}}
\newcommand{\QIbl}{\ensuremath{Q_{1}^{\text{bl}}}}
\newcommand{\QIcl}{\ensuremath{Q_{1}^{\text{cl}}}}
\newcommand{\QIwk}{\ensuremath{Q_{1}^{\text{wk}}}}
\newcommand{\DQIwk}{\ensuremath{\delta Q_{1}^{\text{wk}}}}
\newcommand{\QIp}{\ensuremath{Q_{1,p}}}
\newcommand{\QIS}{\ensuremath{\mathcal{Q}_{1}^S}}
\newcommand{\QID}{\ensuremath{\mathcal{Q}_{1}^D}}
\newcommand{\QIT}{\ensuremath{\mathcal{Q}_{1}^T}}
\newcommand{\QIE}{\ensuremath{\mathcal{Q}_{1}^E}}
\newcommand{\QII}{\ensuremath{Q_2}}
\newcommand{\DQII}{\ensuremath{\delta Q_2}}
\newcommand{\QIIw}{\ensuremath{Q_{2,w}}}
\newcommand{\QIIcvw}{\ensuremath{Q_{2,w}^{\text{cv}}}}
\newcommand{\QIIx}{\ensuremath{Q_{2,x}}}
\newcommand{\QIIcvx}{\ensuremath{Q_{2,x}^{\text{cv}}}}
\newcommand{\QIIcv}{\ensuremath{Q_{2}^{\text{cv}}}}
\newcommand{\DQIIcv}{\ensuremath{\delta Q_{2}^{\text{cv}}}}
\newcommand{\QIIbl}{\ensuremath{Q_{2}^{\text{bl}}}}
\newcommand{\QIIcl}{\ensuremath{Q_{2}^{\text{cl}}}}
\newcommand{\QIIwk}{\ensuremath{Q_{2}^{\text{wk}}}}
\newcommand{\DQIIwk}{\ensuremath{\delta Q_{2}^{\text{wk}}}}
\newcommand{\QIIp}{\ensuremath{Q_{2,p}}}
\newcommand{\QIIS}{\ensuremath{\mathcal{Q}_{2}^S}}
\newcommand{\QIID}{\ensuremath{\mathcal{Q}_{2}^D}}
\newcommand{\QIIT}{\ensuremath{\mathcal{Q}_{2}^T}}
\newcommand{\QIIE}{\ensuremath{\mathcal{Q}_{2}^E}}
\newcommand{\Sig}{\ensuremath{\Sigma\;}}
\newcommand{\Sigp}{\ensuremath{\Sigma'\;}}
\newcommand{\Sigw}{\ensuremath{\Sigma_w\;}}
\newcommand{\Sige}{\ensuremath{\Sigma_e}}
\newcommand{\Sigu}{\ensuremath{\Sigma_u}}
\newcommand{\Sigx}{\ensuremath{\Sigma_x}}
\newcommand{\Wb}{\ensuremath{W_{\text{buoy}}}}
\newcommand{\Wbb}{\bar{\bar{W}}}
\newcommand{\wa}{\langle w\rangle}
\newcommand{\wpa}{\langle w'\rangle}
\newcommand{\wwa}{\langle w^2\rangle}
\newcommand{\wwwa}{\langle w^3\rangle}
\newcommand{\wwpa}{\langle w^{\prime\prime\prime 2}\rangle}$$
Le but de cette note est d'établir les formules menant à la détermination des quantités
d'eau condensées sous forme d'eau liquide et de glace dans le sous-programme Fisrtilp. La
principale difficulté réside dans le fait que la condensation dégage de la chaleur latente
et que $$\qsat$$ dépend de la température. Dans tous ces calculs, on considère une couche
atmosphérique sans condensat de température $$T$$ et d'humidité spécifique $$q$$ et on se
donne la fraction $$f$$ de la maille où se produit la condensation. Le principe est d'écrire
que l'énergie statique humide et la quantité d'eau totale sont conservées dans le
processus de condensation.
Dans la première version créée par Laurent Li, on suppose que seule la partie
nuageuse de la maille voit sa température augmenter du fait de la condensation. Alors le
système que l'on décrit présente des températures différentes dans le nuage et hors du
nuage.
Laurent Li résoud :
\begin{equation}
C_p T' \;+\; L_v \qsat(T') \;=\; C_p T \;+\; L_v q
\label{eq.init}
\end{equation}
étant entendu que cela s'applique à la partie nuageuse de la maille.
Nous voulons, au contraire, écrire que les températures sont toujours uniformisées
horizontalement très rapidement (et même on va supposer instantanément). En outre nous
allons généraliser les calculs au cas où de la condensation solide est présente et nous
allons profiter de l'occasion pour écrire des formules complètes prenant en compte la
variation des chaleurs latentes avec la température (voir dans l'annexe les formules donnant
l'énergie statique humide $$h$$).
== Écriture des équations de conservation ==
Soit donc $$f$$ la fraction nuageuse. On écrit que sur $$f$$ il y a condensation et que sur
$$(1-f)$$ il n'y a pas de changement de phase. On suppose connu le contenu massique total
d'eau $$q_n$$ (i.e. vapeur + liquide + glace) dans le nuage. En désignant par $$T'$$ la
température (uniforme) après condensation et par $$q"$$ l'humidité spécifique hors des
nuages, les énergies statiques massiques initiale $$h$$, dans le nuage $$h_n$$ et hors du
nuage $$h"$$ s'écrivent~:
\begin{equation}
\left \lbrace
\begin{array}{ll}
h_n &=\;[(1-q_n)C_{pd} + q_n C_l] T' + L_v \qsat - L_f q_i + gz \\
h" &=\;[(1-q")C_{pd} + q"C_l] T' + L_v q" + gz \\
h &=\;[(1-q)C_{pd} + q C_l] T + L_v q + gz \\
\end{array}
\right .
\end{equation}
où $$\qsat$$ désigne l'humidité saturante. Ce peut être l'humidité saturante à la
température $$T'$$ sur l'eau liquide ou sur la glace. A voir plus loin.
La conservation de l'énergie statique humide et de l'eau s'écrit~:
\begin{equation}
\left \lbrace
\begin{array}{ll}
f h_n + (1-f)h" &=\;h \\
f q_n + (1-f)q" &=\;q \\
\end{array}
\right .
\end{equation}
Ce qui donne~:
\begin{equation}
\left \lbrace
\begin{array}{l}
T'[C_{pd} + (f q_n + (1-f) q") (C_l-C_{pd})] + L_v [f \qsat + (1-f)q"] - L_f f q_i \\
\qquad \qquad = [C_{pd} + q (C_l-C_{pd})] T + L_v q \\
\\
q = f q_n + (1-f) q"\\
\end{array}
\right .
\end{equation}
Soit, en posant $$C_p = C_{pd} + (C_l-C_{pd}) q$$~:
\begin{equation}
\left \lbrace
\begin{array}{l}
C_p T' - f [L_v(q_n-\qsat) + L_f q_i] = C_p T \\
q = f q_n + (1-f) q"\\
\end{array}
\right .
\end{equation}
Maintenant nous supposons que la glace représente une fraction $$\gamma$$ du condensat~:
$$q_i = \gamma (q_n - \qsat)$$. Finalement les équations de conservation s'écrivent~:
\begin{equation}
\label{eq.conserv_fin}
\left \lbrace
\begin{array}{l}
C_p T' - f (L_v+\gamma L_f)(q_n-\qsat) = C_p T \\
q = f q_n + (1-f) q"\\
\end{array}
\right .
\end{equation}
== Mise en oeuvre ==
Nous supposons maintenant que $$\qsat$$ est égale à l'humidité saturante sur eau liquide
lorsqu'il n'y a pas de glace et à l'humidité saturante sur glace dès que la glace est
présente.
L'équation (\ref{eq.conserv_fin}) pour la température peut être écrite sous une forme
analogue à l'équation initiale (\ref{eq.init}) de Laurent Li~:
\begin{equation}
\label{eq.conserv_fin_lli}
C_p T' \;+\; f (L_v+\gamma L_f) \qsat(T')] \;=\; C_p T \;+\; f (L_v+\gamma L_f) q_n
\end{equation}
On constate que l'on passe de l'équation (\ref{eq.init}) à l'équation
(\ref{eq.conserv_fin_lli}) en remplaçant $$L_v$$ par $$f (L_v+\gamma L_f)$$ et $$q$$ par $$q_n$$.
L'itération convergeant vers $$T'$$ s'obtient ainsi directement à partir des formules de
Laurent~:
\begin{equation}
\displaystyle{
T'_{j+1}\;=\;T'_j\;+\;\frac{T-T'_j\;+\;\frac{f (L_v+\gamma L_f)}{C_p}[q_n\;-\;\qsat(T'_j)]}
{1\;+\;\frac{f (L_v+\gamma L_f)}{C_p}\partial_T\qsat(T'_j)} }
\label{eq.iter}
\end{equation}
L'expérience montre que cette itération converge assez vite, en 3 ou 4 passages. Elle va
fournir une valeur approchée $$T'_a$$ à partir de laquelle on peut calculer l'eau condensée~:
$$
c\;=\;f[q_n\;-\;\qsat(T'_a)]
$$
et les estimations finales de la température $$T'$$ et de l'humidité $$q'$$ telles que
l'énergie et l'eau soient exactement conservées~:
\begin{equation}
\left \lbrace
\begin{array}{l}
T'\;=\; T\;+\;\frac{L_v+\gamma L_f}{C_p}c \\
q'\;=\;q\;-\;c \\
\end{array}
\right .
\end{equation}
== Annexe: définitions des enthalpies et énergies statiques massiques ==
=== I - Enthalpies massiques~: ===
Grandeurs conservées dans les \underline{transformations adiabatiques
isobares}.
\begin{equation}
\begin{array}{ll}
\left \lbrace
\begin{array}{lll}
k &=& (1-q_t) k_d + q_v k_v + q_l k_l + q_i k_i \\
L_v(T) &=& k_v - k_l \\
L_s(T) &=& k_v - k_i\;, \quad L_f(T) = L_s(T)-L_v(T)\\
k_d &=& C_{pd} T \\
k_l &=& C_l T \\
k_i &=& C_i T \\
\end{array}
\right \rbrace & \left .
\begin{array}{l}
\rm{enthalpie} \\
k=[(1-q_t) C_{pd} +q_t C_l] T + L_v q_v - L_f q_i\\
\end{array} \right .
\end{array}
\end{equation}
Comme $$L_v-(C_{pv}-C_l)T = \rm{cste}$$,
l'enthalpie avec eau liquide $$k_w=k-q_t[L_v-(C_{pv}-C_l)T]$$
est aussi conservée dans les transformations adiabatiques isobares~:
$$
k_w = [(1-q_t) C_{pd} + q_t C_{pv}] T - L_v q_l - L_s q_i
$$
On peut faire le même genre de chose pour obtenir une expression sans $$q_i$$,
ce qui donne~: et comme $$L_f-(C_l-C_i)T = \rm{cste}$$, l'enthalpie (sans nom)
$$k_i=k-q_t[L_f-(C_l-C_i)T]$$ est aussi conservée dans les transformations
adiabatiques isobares~:
$$
k_i = [(1-q_t) C_{pd} + q_t C_i] T+ L_s q_v + L_f q_l
$$
=== II - Energies statiques~: ===
Grandeurs conservées dans les \\
\underline{transformations adiabatiques où le changement
de pression est purement hydrostatique}.
\begin{equation}
\begin{array}{ll}
\left .
\begin{array}{lll}
\rm{Adiabatisme :} & dk &\displaystyle{=\frac{dp}{\rho} }\\
& & \\
\rm{Hydrostasie :} & \displaystyle{\frac{dp}{\rho} }&= -g dz
\end{array}
\right \rbrace & \left .
\begin{array}{l}
dk + g dz = 0 \\
\end{array} \right .
\end{array}
\end{equation}
\begin{tabular}{ll}
Energie statique humide : &
$$h=[(1-q_t)C_{pd}+q_tC_l]T + L_v q_v - L_f q_i + gz$$ \\
& \\
Energie statique avec eau liquide : &
$$h_w=[(1-q_t)C_{pd}+q_tC_{pv}]T - L_vq_l - L_s q_i + gz$$ \\
& \\
Energie statique sans nom : &
$$h_i=[(1-q_t) C_{pd} + q_t C_i] T+ L_s q_v + L_f q_l + gz$$ \\
& \\
Energie statique sèche : & $$h_d=[(1-q)C_{pd}+qC_{pv}]T +gz$$ \\
(= $$h_w$$ avec $$q_l\;=\;0$$ et $$q_i\;=\;0$$) & \\
& \\
\end{tabular} \\
[[Category:Physique]]
1c32ed47b6ca50ae7f787f745a65fb7b3d3bcd7f
42
36
2021-01-22T22:22:28Z
Lfairhead
1
Lfairhead a déplacé la page [[EauCondenseeFisrtilp]] vers [[Eau Condensee Fisrtilp]]
wikitext
text/x-wiki
$$\newcommand{\Condl}{Conditions aux limites }
\newcommand{\condl}{conditions aux limites }
\newcommand{\cad}{c'est-\`a-dire }
\newcommand{\Cad}{C'est-\`a-dire }
\newcommand{\tem}{temp\'erature }
\newcommand{\tems}{temp\'eratures }
\newcommand{\Tpni}{T_{\text{p,ni}}}
\newcommand{\Tp}{T_{\text{p}}}
\newcommand{\qpni}{q_{\text{p,ni}}}
\newcommand{\qp}{q_{\text{p}}}
\newcommand{\qsati}{q_{\text{sat,i}}}
\newcommand{\qsat}{q_{\text{sat}}}
\newcommand{\hpni}{h_{\text{p,ni}}}
\newcommand{\hp}{h_{\text{p}}}
%*KEEP,mathwake,T=LATEX.
\newcommand{\nab}{\vec{\nabla}}
\newcommand{\V}{\vec{V}}
\newcommand{\Vt}{\vec{\tilde{V}}}
\newcommand{\F}{\vec{F}}
\newcommand{\NF}{\|\vec{F}\|}
\newcommand{\CD}{C_D}
\newcommand{\pt}{\tilde{p}}
\newcommand{\Dt}{\tilde{D}}
\newcommand{\thetat}{\tilde{\theta}}
\newcommand{\alphat}{\tilde{\alpha}}
\newcommand{\Mt}{\tilde{M}}
\newcommand{\rhot}{\tilde{\rho}}
\newcommand{\qt}{\tilde{q}}
\newcommand{\Tt}{\tilde{T}}
\newcommand{\wt}{\tilde{w}}
\newcommand{\wbar}{\overline{w}}
\newcommand{\ubar}{\overline{u}}
\newcommand{\vbar}{\overline{v}}
\newcommand{\qbar}{\overline{q_v}}
\newcommand{\omgb}{\overline{\omega}}
\newcommand{\omgwb}{\overline{\omega_w}}
\newcommand{\omgub}{\overline{\omega_u}}
\newcommand{\omgxb}{\overline{\omega_x}}
\newcommand{\thetab}{\overline{\theta}}
\newcommand{\qvb}{\overline{q_v}}
\newcommand{\qvwb}{\overline{q_{vw}}}
\newcommand{\qvxb}{\overline{q_{vx}}}
\newcommand{\qvw}{q_{vw}}
\newcommand{\qvx}{q_{vx}}
\newcommand{\thetawb}{\overline{\theta_w}}
\newcommand{\thetaub}{\overline{\theta_u}}
\newcommand{\thetaxb}{\overline{\theta_x}}
\newcommand{\uwb}{\overline{u_w}}
\newcommand{\uub}{\overline{u_u}}
\newcommand{\uxb}{\overline{u_x}}
\newcommand{\vwb}{\overline{v_w}}
\newcommand{\vub}{\overline{v_u}}
\newcommand{\vxb}{\overline{v_x}}
\newcommand{\vwhat}{\hat{v_w}}
\newcommand{\vuhat}{\hat{v_u}}
\newcommand{\vxhat}{\hat{v_x}}
\newcommand{\Kb}{\overline{K}}
\newcommand{\alphab}{\overline{\alpha}}
\newcommand{\alphawb}{\overline{\alpha_w}}
\newcommand{\alphaub}{\overline{\alpha_u}}
\newcommand{\alphaxb}{\overline{\alpha_x}}
\newcommand{\rhob}{\overline{\rho}}
\newcommand{\sigw}{\ensuremath{\sigma_w}}
\newcommand{\dlt}{\delta t}
\newcommand{\Xrz}{X_{r}}
\newcommand{\Xr}[1]{X_{r(#1)}}
\newcommand{\Xrpz}{X_{rp}}
\newcommand{\Xrp}[1]{X_{rp(#1)}}
\newcommand{\Xrvz}{X_{rv}}
\newcommand{\Xrv}[1]{X_{rv(#1)}}
\newcommand{\Xrhz}{\hat{X}_{r}}
\newcommand{\Xrh}[1]{\hat{X}_{r(#1)}}
%%%\newcommand{\dlts2}{\frac{\dlt}{2}}
\newcommand{\dsdlt}{\frac{2}{\dlt}}
\newcommand{\vphi}{\vec{\varphi}}
\newcommand{\veta}{\vec{\eta}}
\newcommand{\vtheta}{\vec{\theta}}
\newcommand{\veps}{\vec{\varepsilon}}
\newcommand{\delphi}{\vec{\delta \varphi}}
\newcommand{\vG}{\vec{G}}
\newcommand{\vf}{\vec{f}}
\newcommand{\n}{\vec{n}}
\newcommand{\rl}{\rho_{l}}
\newcommand{\rv}{\rho_{v}}
\newcommand{\vv}{\vec{V}_{v}}
\newcommand{\vl}{\vec{V}_{l}}
%%%\newcommand{\v}{\vec{V}}
\newcommand{\g}{\vec{g}}
\newcommand{\dsdt}{\frac {\partial }{\partial t}}
\newcommand{\dst}{\partial_t}
\newcommand{\dsp}{\partial_p}
\newcommand{\dsz}{\partial_z}
\newcommand{\dsy}{\partial_y}
\newcommand{\dsx}{\partial_x}
\newcommand{\dsth}{\partial_{\theta}}
\newcommand{\dsq}{\partial_q}
\newcommand{\dsv}{\partial_V}
\newcommand{\dalpha}{\delta \alpha}
\newcommand{\dw}{\delta w}
\newcommand{\dqv}{\delta q_v}
\newcommand{\dtheta}{\delta \theta}
\newcommand{\domg}{\delta \omega}
\newcommand{\domgcv}{\delta \omega^{\text{cv}}}
%%\newcommand{\domgtop}{\delta \omega_{\text{top}}}
\newcommand{\domgtop}{\delta \omega_{w}}
%%\newcommand{\domgupper}{\delta \omega_{\text{upper}}}
\newcommand{\domgupper}{\delta \omega_{h}}
%%\newcommand{\ptop}{p_{\text{top}}}
\newcommand{\ptop}{p_{w}}
%%\newcommand{\pupper}{p_{\text{upper}}}
\newcommand{\pupper}{p_{h}}
%%\newcommand{\htop}{h_{\text{top}}}
\newcommand{\htop}{h_{w}}
%%\newcommand{\hupper}{h_{\text{upper}}}
\newcommand{\hupper}{h_{h}}
\newcommand{\intw}{\int_{\Sigma_w}}
\newcommand{\intu}{\int_{\Sigma_u}}
\newcommand{\intx}{\int_{\Sigma_x}}
\newcommand{\inte}{\int_{\Sigma_e}}
\newcommand{\intp}{\int_{\Sigma'}}
\newcommand{\intgw}{\int_{\Gamma_{w,in}}}
\newcommand{\intgwp}{\int_{\Gamma_{w,in}^+}}
\newcommand{\intgwm}{\int_{\Gamma_{w,in}^-}}
\newcommand{\intg}{\int_{\Gamma}}
\newcommand{\intgp}{\int_{\Gamma'}}
\newcommand{\intgpe}{\int_{\Gamma'_e}}
\newcommand{\intgpu}{\int_{\Gamma'_u}}
\newcommand{\intgpx}{\int_{\Gamma'_x}}
\newcommand{\intgpw}{\int_{\Gamma'_w}}
\newcommand{\kgw}{k_{\text{gw}}}
\newcommand{\taugw}{\tau_{\text{gw}}}
\newcommand{\klift}{k_{\text{lift}}}
%%\newcommand{\kliftw}{k_{\text{lift,wk}}}
\newcommand{\kliftw}{\mathcal{E}_{\text{lift}}^{\text{wk}}}
\newcommand{\Eliftw}{\mathcal{E}_{\text{lift}}^{\text{wk}}}
\newcommand{\Pb}{\ensuremath{P_{\text{buoy}}}}
\newcommand{\Pliftw}{\ensuremath{P_{\text{lift}}^{\text{wk}}}}
\newcommand{\Pliftwh}{\ensuremath{\widehat{P_{\text{lift}}^{\text{wk}}}}}
\newcommand{\Pliftwp}{\ensuremath{\widetilde{P_{\text{lift}}^{\text{wk}}}}}
\newcommand{\LG}{\ensuremath{L_{\Gamma}}}
\newcommand{\LGh}{\ensuremath{\widehat{L_{\Gamma}}}}
\newcommand{\LGp}{\ensuremath{\widetilde{L_{\Gamma}}}}
\newcommand{\LGt}{\ensuremath{\widetilde{L_{\Gamma}}}}
\newcommand{\Dw}{\ensuremath{D_{\text{wk}}}}
\newcommand{\QI}{\ensuremath{Q_1}}
\newcommand{\DQI}{\ensuremath{\delta Q_1}}
\newcommand{\QIsat}{\ensuremath{Q_{1}^{\text{sat}}}}
\newcommand{\QIcvsat}{\ensuremath{Q_{1}^{\text{cv,sat}}}}
\newcommand{\QIunsat}{\ensuremath{Q_{1}^{\text{unsat}}}}
\newcommand{\QIcvunsat}{\ensuremath{Q_{1}^{\text{cv,unsat}}}}
\newcommand{\QIIsat}{\ensuremath{Q_{2}^{\text{sat}}}}
\newcommand{\QIIcvsat}{\ensuremath{Q_{2}^{\text{cv,sat}}}}
\newcommand{\QIIunsat}{\ensuremath{Q_{2}^{\text{unsat}}}}
\newcommand{\QIIcvunsat}{\ensuremath{Q_{2}^{\text{cv,unsat}}}}
\newcommand{\QIw}{\ensuremath{Q_{1,w}}}
\newcommand{\QIcvw}{\ensuremath{Q_{1,w}^{\text{cv}}}}
\newcommand{\QIx}{\ensuremath{Q_{1,x}}}
\newcommand{\QIcvx}{\ensuremath{Q_{1,x}^{\text{cv}}}}
\newcommand{\QIcv}{\ensuremath{Q_{1}^{\text{cv}}}}
\newcommand{\DQIcv}{\ensuremath{\delta Q_{1}^{\text{cv}}}}
\newcommand{\QIbl}{\ensuremath{Q_{1}^{\text{bl}}}}
\newcommand{\QIcl}{\ensuremath{Q_{1}^{\text{cl}}}}
\newcommand{\QIwk}{\ensuremath{Q_{1}^{\text{wk}}}}
\newcommand{\DQIwk}{\ensuremath{\delta Q_{1}^{\text{wk}}}}
\newcommand{\QIp}{\ensuremath{Q_{1,p}}}
\newcommand{\QIS}{\ensuremath{\mathcal{Q}_{1}^S}}
\newcommand{\QID}{\ensuremath{\mathcal{Q}_{1}^D}}
\newcommand{\QIT}{\ensuremath{\mathcal{Q}_{1}^T}}
\newcommand{\QIE}{\ensuremath{\mathcal{Q}_{1}^E}}
\newcommand{\QII}{\ensuremath{Q_2}}
\newcommand{\DQII}{\ensuremath{\delta Q_2}}
\newcommand{\QIIw}{\ensuremath{Q_{2,w}}}
\newcommand{\QIIcvw}{\ensuremath{Q_{2,w}^{\text{cv}}}}
\newcommand{\QIIx}{\ensuremath{Q_{2,x}}}
\newcommand{\QIIcvx}{\ensuremath{Q_{2,x}^{\text{cv}}}}
\newcommand{\QIIcv}{\ensuremath{Q_{2}^{\text{cv}}}}
\newcommand{\DQIIcv}{\ensuremath{\delta Q_{2}^{\text{cv}}}}
\newcommand{\QIIbl}{\ensuremath{Q_{2}^{\text{bl}}}}
\newcommand{\QIIcl}{\ensuremath{Q_{2}^{\text{cl}}}}
\newcommand{\QIIwk}{\ensuremath{Q_{2}^{\text{wk}}}}
\newcommand{\DQIIwk}{\ensuremath{\delta Q_{2}^{\text{wk}}}}
\newcommand{\QIIp}{\ensuremath{Q_{2,p}}}
\newcommand{\QIIS}{\ensuremath{\mathcal{Q}_{2}^S}}
\newcommand{\QIID}{\ensuremath{\mathcal{Q}_{2}^D}}
\newcommand{\QIIT}{\ensuremath{\mathcal{Q}_{2}^T}}
\newcommand{\QIIE}{\ensuremath{\mathcal{Q}_{2}^E}}
\newcommand{\Sig}{\ensuremath{\Sigma\;}}
\newcommand{\Sigp}{\ensuremath{\Sigma'\;}}
\newcommand{\Sigw}{\ensuremath{\Sigma_w\;}}
\newcommand{\Sige}{\ensuremath{\Sigma_e}}
\newcommand{\Sigu}{\ensuremath{\Sigma_u}}
\newcommand{\Sigx}{\ensuremath{\Sigma_x}}
\newcommand{\Wb}{\ensuremath{W_{\text{buoy}}}}
\newcommand{\Wbb}{\bar{\bar{W}}}
\newcommand{\wa}{\langle w\rangle}
\newcommand{\wpa}{\langle w'\rangle}
\newcommand{\wwa}{\langle w^2\rangle}
\newcommand{\wwwa}{\langle w^3\rangle}
\newcommand{\wwpa}{\langle w^{\prime\prime\prime 2}\rangle}$$
Le but de cette note est d'établir les formules menant à la détermination des quantités
d'eau condensées sous forme d'eau liquide et de glace dans le sous-programme Fisrtilp. La
principale difficulté réside dans le fait que la condensation dégage de la chaleur latente
et que $$\qsat$$ dépend de la température. Dans tous ces calculs, on considère une couche
atmosphérique sans condensat de température $$T$$ et d'humidité spécifique $$q$$ et on se
donne la fraction $$f$$ de la maille où se produit la condensation. Le principe est d'écrire
que l'énergie statique humide et la quantité d'eau totale sont conservées dans le
processus de condensation.
Dans la première version créée par Laurent Li, on suppose que seule la partie
nuageuse de la maille voit sa température augmenter du fait de la condensation. Alors le
système que l'on décrit présente des températures différentes dans le nuage et hors du
nuage.
Laurent Li résoud :
\begin{equation}
C_p T' \;+\; L_v \qsat(T') \;=\; C_p T \;+\; L_v q
\label{eq.init}
\end{equation}
étant entendu que cela s'applique à la partie nuageuse de la maille.
Nous voulons, au contraire, écrire que les températures sont toujours uniformisées
horizontalement très rapidement (et même on va supposer instantanément). En outre nous
allons généraliser les calculs au cas où de la condensation solide est présente et nous
allons profiter de l'occasion pour écrire des formules complètes prenant en compte la
variation des chaleurs latentes avec la température (voir dans l'annexe les formules donnant
l'énergie statique humide $$h$$).
== Écriture des équations de conservation ==
Soit donc $$f$$ la fraction nuageuse. On écrit que sur $$f$$ il y a condensation et que sur
$$(1-f)$$ il n'y a pas de changement de phase. On suppose connu le contenu massique total
d'eau $$q_n$$ (i.e. vapeur + liquide + glace) dans le nuage. En désignant par $$T'$$ la
température (uniforme) après condensation et par $$q"$$ l'humidité spécifique hors des
nuages, les énergies statiques massiques initiale $$h$$, dans le nuage $$h_n$$ et hors du
nuage $$h"$$ s'écrivent~:
\begin{equation}
\left \lbrace
\begin{array}{ll}
h_n &=\;[(1-q_n)C_{pd} + q_n C_l] T' + L_v \qsat - L_f q_i + gz \\
h" &=\;[(1-q")C_{pd} + q"C_l] T' + L_v q" + gz \\
h &=\;[(1-q)C_{pd} + q C_l] T + L_v q + gz \\
\end{array}
\right .
\end{equation}
où $$\qsat$$ désigne l'humidité saturante. Ce peut être l'humidité saturante à la
température $$T'$$ sur l'eau liquide ou sur la glace. A voir plus loin.
La conservation de l'énergie statique humide et de l'eau s'écrit~:
\begin{equation}
\left \lbrace
\begin{array}{ll}
f h_n + (1-f)h" &=\;h \\
f q_n + (1-f)q" &=\;q \\
\end{array}
\right .
\end{equation}
Ce qui donne~:
\begin{equation}
\left \lbrace
\begin{array}{l}
T'[C_{pd} + (f q_n + (1-f) q") (C_l-C_{pd})] + L_v [f \qsat + (1-f)q"] - L_f f q_i \\
\qquad \qquad = [C_{pd} + q (C_l-C_{pd})] T + L_v q \\
\\
q = f q_n + (1-f) q"\\
\end{array}
\right .
\end{equation}
Soit, en posant $$C_p = C_{pd} + (C_l-C_{pd}) q$$~:
\begin{equation}
\left \lbrace
\begin{array}{l}
C_p T' - f [L_v(q_n-\qsat) + L_f q_i] = C_p T \\
q = f q_n + (1-f) q"\\
\end{array}
\right .
\end{equation}
Maintenant nous supposons que la glace représente une fraction $$\gamma$$ du condensat~:
$$q_i = \gamma (q_n - \qsat)$$. Finalement les équations de conservation s'écrivent~:
\begin{equation}
\label{eq.conserv_fin}
\left \lbrace
\begin{array}{l}
C_p T' - f (L_v+\gamma L_f)(q_n-\qsat) = C_p T \\
q = f q_n + (1-f) q"\\
\end{array}
\right .
\end{equation}
== Mise en oeuvre ==
Nous supposons maintenant que $$\qsat$$ est égale à l'humidité saturante sur eau liquide
lorsqu'il n'y a pas de glace et à l'humidité saturante sur glace dès que la glace est
présente.
L'équation (\ref{eq.conserv_fin}) pour la température peut être écrite sous une forme
analogue à l'équation initiale (\ref{eq.init}) de Laurent Li~:
\begin{equation}
\label{eq.conserv_fin_lli}
C_p T' \;+\; f (L_v+\gamma L_f) \qsat(T')] \;=\; C_p T \;+\; f (L_v+\gamma L_f) q_n
\end{equation}
On constate que l'on passe de l'équation (\ref{eq.init}) à l'équation
(\ref{eq.conserv_fin_lli}) en remplaçant $$L_v$$ par $$f (L_v+\gamma L_f)$$ et $$q$$ par $$q_n$$.
L'itération convergeant vers $$T'$$ s'obtient ainsi directement à partir des formules de
Laurent~:
\begin{equation}
\displaystyle{
T'_{j+1}\;=\;T'_j\;+\;\frac{T-T'_j\;+\;\frac{f (L_v+\gamma L_f)}{C_p}[q_n\;-\;\qsat(T'_j)]}
{1\;+\;\frac{f (L_v+\gamma L_f)}{C_p}\partial_T\qsat(T'_j)} }
\label{eq.iter}
\end{equation}
L'expérience montre que cette itération converge assez vite, en 3 ou 4 passages. Elle va
fournir une valeur approchée $$T'_a$$ à partir de laquelle on peut calculer l'eau condensée~:
$$
c\;=\;f[q_n\;-\;\qsat(T'_a)]
$$
et les estimations finales de la température $$T'$$ et de l'humidité $$q'$$ telles que
l'énergie et l'eau soient exactement conservées~:
\begin{equation}
\left \lbrace
\begin{array}{l}
T'\;=\; T\;+\;\frac{L_v+\gamma L_f}{C_p}c \\
q'\;=\;q\;-\;c \\
\end{array}
\right .
\end{equation}
== Annexe: définitions des enthalpies et énergies statiques massiques ==
=== I - Enthalpies massiques~: ===
Grandeurs conservées dans les \underline{transformations adiabatiques
isobares}.
\begin{equation}
\begin{array}{ll}
\left \lbrace
\begin{array}{lll}
k &=& (1-q_t) k_d + q_v k_v + q_l k_l + q_i k_i \\
L_v(T) &=& k_v - k_l \\
L_s(T) &=& k_v - k_i\;, \quad L_f(T) = L_s(T)-L_v(T)\\
k_d &=& C_{pd} T \\
k_l &=& C_l T \\
k_i &=& C_i T \\
\end{array}
\right \rbrace & \left .
\begin{array}{l}
\rm{enthalpie} \\
k=[(1-q_t) C_{pd} +q_t C_l] T + L_v q_v - L_f q_i\\
\end{array} \right .
\end{array}
\end{equation}
Comme $$L_v-(C_{pv}-C_l)T = \rm{cste}$$,
l'enthalpie avec eau liquide $$k_w=k-q_t[L_v-(C_{pv}-C_l)T]$$
est aussi conservée dans les transformations adiabatiques isobares~:
$$
k_w = [(1-q_t) C_{pd} + q_t C_{pv}] T - L_v q_l - L_s q_i
$$
On peut faire le même genre de chose pour obtenir une expression sans $$q_i$$,
ce qui donne~: et comme $$L_f-(C_l-C_i)T = \rm{cste}$$, l'enthalpie (sans nom)
$$k_i=k-q_t[L_f-(C_l-C_i)T]$$ est aussi conservée dans les transformations
adiabatiques isobares~:
$$
k_i = [(1-q_t) C_{pd} + q_t C_i] T+ L_s q_v + L_f q_l
$$
=== II - Energies statiques~: ===
Grandeurs conservées dans les \\
\underline{transformations adiabatiques où le changement
de pression est purement hydrostatique}.
\begin{equation}
\begin{array}{ll}
\left .
\begin{array}{lll}
\rm{Adiabatisme :} & dk &\displaystyle{=\frac{dp}{\rho} }\\
& & \\
\rm{Hydrostasie :} & \displaystyle{\frac{dp}{\rho} }&= -g dz
\end{array}
\right \rbrace & \left .
\begin{array}{l}
dk + g dz = 0 \\
\end{array} \right .
\end{array}
\end{equation}
\begin{tabular}{ll}
Energie statique humide : &
$$h=[(1-q_t)C_{pd}+q_tC_l]T + L_v q_v - L_f q_i + gz$$ \\
& \\
Energie statique avec eau liquide : &
$$h_w=[(1-q_t)C_{pd}+q_tC_{pv}]T - L_vq_l - L_s q_i + gz$$ \\
& \\
Energie statique sans nom : &
$$h_i=[(1-q_t) C_{pd} + q_t C_i] T+ L_s q_v + L_f q_l + gz$$ \\
& \\
Energie statique sèche : & $$h_d=[(1-q)C_{pd}+qC_{pv}]T +gz$$ \\
(= $$h_w$$ avec $$q_l\;=\;0$$ et $$q_i\;=\;0$$) & \\
& \\
\end{tabular} \\
[[Category:Physique]]
1c32ed47b6ca50ae7f787f745a65fb7b3d3bcd7f
Précipitations neigeuses pour des températures négatives proches de 0
0
8
8
2020-11-15T11:53:05Z
Lfairhead
1
Page créée avec « \newcommand{\Condl}{Conditions aux limites } \newcommand{\condl}{conditions aux limites } \newcommand{\cad}{c'est-\`a-dire } \newcommand{\Cad}{C'est-\`a-dire } \newcomman... »
wikitext
text/x-wiki
\newcommand{\Condl}{Conditions aux limites }
\newcommand{\condl}{conditions aux limites }
\newcommand{\cad}{c'est-\`a-dire }
\newcommand{\Cad}{C'est-\`a-dire }
\newcommand{\tem}{temp\'erature }
\newcommand{\tems}{temp\'eratures }
\newcommand{\Tpni}{T_{\text{p,ni}}}
\newcommand{\Tp}{T_{\text{p}}}
\newcommand{\qpni}{q_{\text{p,ni}}}
\newcommand{\qp}{q_{\text{p}}}
\newcommand{\qsati}{q_{\text{sat,i}}}
\newcommand{\qsat}{q_{\text{sat}}}
\newcommand{\hpni}{h_{\text{p,ni}}}
\newcommand{\hp}{h_{\text{p}}}
\newcommand{\nab}{\vec{\nabla}}
\newcommand{\V}{\vec{V}}
\newcommand{\Vt}{\vec{\tilde{V}}}
\newcommand{\F}{\vec{F}}
\newcommand{\NF}{\|\vec{F}\|}
\newcommand{\CD}{C_D}
\newcommand{\pt}{\tilde{p}}
\newcommand{\Dt}{\tilde{D}}
\newcommand{\thetat}{\tilde{\theta}}
\newcommand{\alphat}{\tilde{\alpha}}
\newcommand{\Mt}{\tilde{M}}
\newcommand{\rhot}{\tilde{\rho}}
\newcommand{\qt}{\tilde{q}}
\newcommand{\Tt}{\tilde{T}}
\newcommand{\wt}{\tilde{w}}
\newcommand{\wbar}{\overline{w}}
\newcommand{\ubar}{\overline{u}}
\newcommand{\vbar}{\overline{v}}
\newcommand{\qbar}{\overline{q_v}}
\newcommand{\omgb}{\overline{\omega}}
\newcommand{\omgwb}{\overline{\omega_w}}
\newcommand{\omgub}{\overline{\omega_u}}
\newcommand{\omgxb}{\overline{\omega_x}}
\newcommand{\thetab}{\overline{\theta}}
\newcommand{\qvb}{\overline{q_v}}
\newcommand{\qvwb}{\overline{q_{vw}}}
\newcommand{\qvxb}{\overline{q_{vx}}}
\newcommand{\qvw}{q_{vw}}
\newcommand{\qvx}{q_{vx}}
\newcommand{\thetawb}{\overline{\theta_w}}
\newcommand{\thetaub}{\overline{\theta_u}}
\newcommand{\thetaxb}{\overline{\theta_x}}
\newcommand{\uwb}{\overline{u_w}}
\newcommand{\uub}{\overline{u_u}}
\newcommand{\uxb}{\overline{u_x}}
\newcommand{\vwb}{\overline{v_w}}
\newcommand{\vub}{\overline{v_u}}
\newcommand{\vxb}{\overline{v_x}}
\newcommand{\vwhat}{\hat{v_w}}
\newcommand{\vuhat}{\hat{v_u}}
\newcommand{\vxhat}{\hat{v_x}}
\newcommand{\Kb}{\overline{K}}
\newcommand{\alphab}{\overline{\alpha}}
\newcommand{\alphawb}{\overline{\alpha_w}}
\newcommand{\alphaub}{\overline{\alpha_u}}
\newcommand{\alphaxb}{\overline{\alpha_x}}
\newcommand{\rhob}{\overline{\rho}}
\newcommand{\sigw}{\ensuremath{\sigma_w}}
\newcommand{\dlt}{\delta t}
\newcommand{\Xrz}{X_{r}}
\newcommand{\Xr}[1]{X_{r(#1)}}
\newcommand{\Xrpz}{X_{rp}}
\newcommand{\Xrp}[1]{X_{rp(#1)}}
\newcommand{\Xrvz}{X_{rv}}
\newcommand{\Xrv}[1]{X_{rv(#1)}}
\newcommand{\Xrhz}{\hat{X}_{r}}
\newcommand{\Xrh}[1]{\hat{X}_{r(#1)}}
%%%\newcommand{\dlts2}{\frac{\dlt}{2}}
\newcommand{\dsdlt}{\frac{2}{\dlt}}
\newcommand{\vphi}{\vec{\varphi}}
\newcommand{\veta}{\vec{\eta}}
\newcommand{\vtheta}{\vec{\theta}}
\newcommand{\veps}{\vec{\varepsilon}}
\newcommand{\delphi}{\vec{\delta \varphi}}
\newcommand{\vG}{\vec{G}}
\newcommand{\vf}{\vec{f}}
\newcommand{\n}{\vec{n}}
\newcommand{\rl}{\rho_{l}}
\newcommand{\rv}{\rho_{v}}
\newcommand{\vv}{\vec{V}_{v}}
\newcommand{\vl}{\vec{V}_{l}}
%%%\newcommand{\v}{\vec{V}}
\newcommand{\g}{\vec{g}}
\newcommand{\dsdt}{\frac {\partial }{\partial t}}
\newcommand{\dst}{\partial_t}
\newcommand{\dsp}{\partial_p}
\newcommand{\dsz}{\partial_z}
\newcommand{\dsy}{\partial_y}
\newcommand{\dsx}{\partial_x}
\newcommand{\dsth}{\partial_{\theta}}
\newcommand{\dsq}{\partial_q}
\newcommand{\dsv}{\partial_V}
\newcommand{\dalpha}{\delta \alpha}
\newcommand{\dw}{\delta w}
\newcommand{\dqv}{\delta q_v}
\newcommand{\dtheta}{\delta \theta}
\newcommand{\domg}{\delta \omega}
\newcommand{\domgcv}{\delta \omega^{\text{cv}}}
%%\newcommand{\domgtop}{\delta \omega_{\text{top}}}
\newcommand{\domgtop}{\delta \omega_{w}}
%%\newcommand{\domgupper}{\delta \omega_{\text{upper}}}
\newcommand{\domgupper}{\delta \omega_{h}}
%%\newcommand{\ptop}{p_{\text{top}}}
\newcommand{\ptop}{p_{w}}
%%\newcommand{\pupper}{p_{\text{upper}}}
\newcommand{\pupper}{p_{h}}
%%\newcommand{\htop}{h_{\text{top}}}
\newcommand{\htop}{h_{w}}
%%\newcommand{\hupper}{h_{\text{upper}}}
\newcommand{\hupper}{h_{h}}
\newcommand{\intw}{\int_{\Sigma_w}}
\newcommand{\intu}{\int_{\Sigma_u}}
\newcommand{\intx}{\int_{\Sigma_x}}
\newcommand{\inte}{\int_{\Sigma_e}}
\newcommand{\intp}{\int_{\Sigma'}}
\newcommand{\intgw}{\int_{\Gamma_{w,in}}}
\newcommand{\intgwp}{\int_{\Gamma_{w,in}^+}}
\newcommand{\intgwm}{\int_{\Gamma_{w,in}^-}}
\newcommand{\intg}{\int_{\Gamma}}
\newcommand{\intgp}{\int_{\Gamma'}}
\newcommand{\intgpe}{\int_{\Gamma'_e}}
\newcommand{\intgpu}{\int_{\Gamma'_u}}
\newcommand{\intgpx}{\int_{\Gamma'_x}}
\newcommand{\intgpw}{\int_{\Gamma'_w}}
\newcommand{\kgw}{k_{\text{gw}}}
\newcommand{\taugw}{\tau_{\text{gw}}}
\newcommand{\klift}{k_{\text{lift}}}
%%\newcommand{\kliftw}{k_{\text{lift,wk}}}
\newcommand{\kliftw}{\mathcal{E}_{\text{lift}}^{\text{wk}}}
\newcommand{\Eliftw}{\mathcal{E}_{\text{lift}}^{\text{wk}}}
\newcommand{\Pb}{\ensuremath{P_{\text{buoy}}}}
\newcommand{\Pliftw}{\ensuremath{P_{\text{lift}}^{\text{wk}}}}
\newcommand{\Pliftwh}{\ensuremath{\widehat{P_{\text{lift}}^{\text{wk}}}}}
\newcommand{\Pliftwp}{\ensuremath{\widetilde{P_{\text{lift}}^{\text{wk}}}}}
\newcommand{\LG}{\ensuremath{L_{\Gamma}}}
\newcommand{\LGh}{\ensuremath{\widehat{L_{\Gamma}}}}
\newcommand{\LGp}{\ensuremath{\widetilde{L_{\Gamma}}}}
\newcommand{\LGt}{\ensuremath{\widetilde{L_{\Gamma}}}}
\newcommand{\Dw}{\ensuremath{D_{\text{wk}}}}
\newcommand{\QI}{\ensuremath{Q_1}}
\newcommand{\DQI}{\ensuremath{\delta Q_1}}
\newcommand{\QIsat}{\ensuremath{Q_{1}^{\text{sat}}}}
\newcommand{\QIcvsat}{\ensuremath{Q_{1}^{\text{cv,sat}}}}
\newcommand{\QIunsat}{\ensuremath{Q_{1}^{\text{unsat}}}}
\newcommand{\QIcvunsat}{\ensuremath{Q_{1}^{\text{cv,unsat}}}}
\newcommand{\QIIsat}{\ensuremath{Q_{2}^{\text{sat}}}}
\newcommand{\QIIcvsat}{\ensuremath{Q_{2}^{\text{cv,sat}}}}
\newcommand{\QIIunsat}{\ensuremath{Q_{2}^{\text{unsat}}}}
\newcommand{\QIIcvunsat}{\ensuremath{Q_{2}^{\text{cv,unsat}}}}
\newcommand{\QIw}{\ensuremath{Q_{1,w}}}
\newcommand{\QIcvw}{\ensuremath{Q_{1,w}^{\text{cv}}}}
\newcommand{\QIx}{\ensuremath{Q_{1,x}}}
\newcommand{\QIcvx}{\ensuremath{Q_{1,x}^{\text{cv}}}}
\newcommand{\QIcv}{\ensuremath{Q_{1}^{\text{cv}}}}
\newcommand{\DQIcv}{\ensuremath{\delta Q_{1}^{\text{cv}}}}
\newcommand{\QIbl}{\ensuremath{Q_{1}^{\text{bl}}}}
\newcommand{\QIcl}{\ensuremath{Q_{1}^{\text{cl}}}}
\newcommand{\QIwk}{\ensuremath{Q_{1}^{\text{wk}}}}
\newcommand{\DQIwk}{\ensuremath{\delta Q_{1}^{\text{wk}}}}
\newcommand{\QIp}{\ensuremath{Q_{1,p}}}
\newcommand{\QIS}{\ensuremath{\mathcal{Q}_{1}^S}}
\newcommand{\QID}{\ensuremath{\mathcal{Q}_{1}^D}}
\newcommand{\QIT}{\ensuremath{\mathcal{Q}_{1}^T}}
\newcommand{\QIE}{\ensuremath{\mathcal{Q}_{1}^E}}
\newcommand{\QII}{\ensuremath{Q_2}}
\newcommand{\DQII}{\ensuremath{\delta Q_2}}
\newcommand{\QIIw}{\ensuremath{Q_{2,w}}}
\newcommand{\QIIcvw}{\ensuremath{Q_{2,w}^{\text{cv}}}}
\newcommand{\QIIx}{\ensuremath{Q_{2,x}}}
\newcommand{\QIIcvx}{\ensuremath{Q_{2,x}^{\text{cv}}}}
\newcommand{\QIIcv}{\ensuremath{Q_{2}^{\text{cv}}}}
\newcommand{\DQIIcv}{\ensuremath{\delta Q_{2}^{\text{cv}}}}
\newcommand{\QIIbl}{\ensuremath{Q_{2}^{\text{bl}}}}
\newcommand{\QIIcl}{\ensuremath{Q_{2}^{\text{cl}}}}
\newcommand{\QIIwk}{\ensuremath{Q_{2}^{\text{wk}}}}
\newcommand{\DQIIwk}{\ensuremath{\delta Q_{2}^{\text{wk}}}}
\newcommand{\QIIp}{\ensuremath{Q_{2,p}}}
\newcommand{\QIIS}{\ensuremath{\mathcal{Q}_{2}^S}}
\newcommand{\QIID}{\ensuremath{\mathcal{Q}_{2}^D}}
\newcommand{\QIIT}{\ensuremath{\mathcal{Q}_{2}^T}}
\newcommand{\QIIE}{\ensuremath{\mathcal{Q}_{2}^E}}
\newcommand{\Sig}{\ensuremath{\Sigma\;}}
\newcommand{\Sigp}{\ensuremath{\Sigma'\;}}
\newcommand{\Sigw}{\ensuremath{\Sigma_w\;}}
\newcommand{\Sige}{\ensuremath{\Sigma_e}}
\newcommand{\Sigu}{\ensuremath{\Sigma_u}}
\newcommand{\Sigx}{\ensuremath{\Sigma_x}}
\newcommand{\Wb}{\ensuremath{W_{\text{buoy}}}}
\newcommand{\Wbb}{\bar{\bar{W}}}
\newcommand{\wa}{\langle w\rangle}
\newcommand{\wpa}{\langle w'\rangle}
\newcommand{\wwa}{\langle w^2\rangle}
\newcommand{\wwwa}{\langle w^3\rangle}
\newcommand{\wwpa}{\langle w^{\prime\prime\prime 2}\rangle}
\begin{center}
\large {\bf Précipitations neigeuses pour des températures négatives proches de
0$^{\circ}$C~: \\
calculs approchés pour une maille horizontalement homogène.
(March 2016)}
\\[1.0cm]
{\bf LMDZ }
\today
\\[1.0cm]
\hrule
\end{center}
\vspace{.7cm}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --0--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Nous considérons une couche nuageuse homogène de température négative T, proche de la
température de fusion $T_f$. L'eau nuageuse est alors essentiellement sous forme liquide
et nous allons négliger la phase glace~:
$$
q_l = q_t - \qsati(T)
$$
où l'humidité saturante $\qsat$ est prise sur la glace. Cependant, les deux humidités
saturantes étant très proches au voisinages de $T_f$, nous allons, pour simplifier,
prendre pour humidité saturante $\qsat$ sur l'eau liquide dans tous les calculs qui
suivent.
La conversion en précipitation est décrite par un processus à seuil~: l'eau nuageuse en
excès par rapport à un seuil $q_{lt}$ est convertie en précipitation avec un temps de
relaxation $\tau_{pr}$. Pour simplifier à nouveau, nous allons considérer cette conversion
comme instantanée. La concentration massique de l'eau précipitante $q_p$ s'écrit alors~:
$$
q_p = q_t - q_{lt}
$$
Finalement, l'effet Bergeron est grossièrement décrit en convertissant en glace toutes
les précipitations formées au-dessous de $T_f$. Ceci entraîne une élévation de température
$\delta T$ telle que~:
$$
C_p \delta T = L'_f q_p
$$
où~:
\begin{equation}
L'_f\;=
\left \lbrace
\begin{array}{ll}
L_f & \text{si} \quad T+\delta T\;\leq\;T_f \\
0 & \text{si} \quad T+\delta T\;>\;T_f \\
\end{array}
\right .
\end{equation}
Partant d'une température $T$ on cherche donc une variation $\delta T$ et une
concentration massique en précipitation $q_p$ telles que~:
\begin{equation}
\left \lbrace
\begin{array}{ll}
q_l & =\; q_t-\qsat(T+\delta T) \\
q_p & =\; q_l-q_{lt} \\
C_p \delta T & =\;L'_f q_p \\
\end{array}
\right .
\end{equation}
soit~:
\begin{equation}
\left \lbrace
\begin{array}{ll}
q_p & =\; q_t-q_{lt}-\qsat(t+\delta T) \\
C_p \delta T & =\;L'_f q_p \\
\end{array}
\right .
\end{equation}
La résolution de ce système de deux équations à deux inconnues ($q_p$ et $\delta T$)
peut se représenter graphiquement (pour simplifier, j'ai considéré la fonction $\qsat(T)$
comme linéaire).
\psset{unit=0.1\linewidth}
\begin{pspicture}(8,3.5)
%axe
\psline{->}(2.,1.0)(7.8,1.0)
\rput(7.7,0.8){$\delta T$}
\psline{->}(2.,1.0)(2.,3.3)
\rput(1.8,3.2){$q_p$}
%qsat
\psline(2.0,2.5)(6.0,1.05)
\rput(1.0,2.5){$q_t-q_{lt}-\qsat(T)$}
\rput(4.5,2.8){$q_p=q_t-q_{lt}-\qsat(T+\delta T)$}
\psline[linewidth=0.3pt]{->}(4.,2.6)(3.0,2.25)
%Delta T
\psline[linewidth=2.5pt](2.0,1.0)(4.0,2.0)
\psline[linewidth=2.5pt](4.0,2.0)(4.0,1.0)
\psline[linewidth=2.5pt](4.0,1.0)(7.5,1.0)
\psline[linestyle=dashed](2.0,2.0)(4.0,2.0)
\rput(1.30,1.9){$\frac{C_p(T_f-T)}{L_f}$}
\rput(3.8,0.8){$T_f-T$}
%Intersections
\pscircle[linewidth=0.3pt](3.74,1.87){0.1}
\rput(6,1.8){$q_t-q_{lt}-\qsat(T_f)$}
\psline[linewidth=0.3pt]{->}(5.,1.8)(4.1,1.8)
\end{pspicture}
%%
Comme la courbe de la deuxième équations (qui pourrait s'appeller la courbe de chauffage)
ne dépasse pas $q_p=\frac{C_p(T_f-T)}{L_f}$, valeur atteinte pour $\delta T = T_f-T$, on
voit qu'il ne peut y avoir de solution que si
$q_t-q_{lt}-\qsat(T_f)\;\leq\;\frac{C_p(T_f-T)}{L_f}$. Si cette inégalité n'est pas
vérifiée, alors la conversion éventuelle de toutes les précipitations en glace porterait
la température du nuage au-dessus de $T_f$, ce qui serait incompatible avec la conversion
des précipitations en glace.
Proposition~: lorsque $q_t-q_{lt}-\qsat(T_f)\;>\;\frac{C_p(T_f-T)}{L_f}$ il ne faut
convertir en glace qu'une partie des précipitations, de façon que la température soit
amenée à $T_f$, le reste des précipitation restant sous forme de pluie. \\
%%
\psset{unit=0.1\linewidth}
\begin{pspicture}(8,3.7)
%axe
\psline{->}(2.,1.0)(7.8,1.0)
\rput(7.7,0.8){$\delta T$}
\psline{->}(2.,1.0)(2.,3.5)
\rput(1.8,3.4){$q_p$}
%qsat
\psline(2.0,3.0)(7.0,1.05)
\rput(1.0,3.0){$q_t-q_{lt}-\qsat(T)$}
%Delta T
\psline[linewidth=2.5pt](2.0,1.0)(4.0,2.0)
\psline[linewidth=2.5pt](4.0,2.0)(4.0,1.0)
\psline[linewidth=2.5pt](4.0,1.0)(7.5,1.0)
\psline[linestyle=dashed](2.0,2.0)(4.0,2.0)
\rput(1.30,1.9){$\frac{C_p(T_f-T)}{L_f}$}
\rput(3.8,0.8){$T_f-T$}
%Intersection
\psline(4.,2.)(4.,2.22)
\rput(6,2.22){$q_t-q_{lt}-\qsat(T_f)$}
\psline[linewidth=0.3pt]{->}(5.,2.22)(4.1,2.22)
\psline{<->}(4.1,1.)(4.1,2.)
\rput(4.5,1.5){glace}
\psline{<->}(3.9,2.)(3.9,2.22)
\rput(3.3,2.1){liquide}
\end{pspicture}
%%
{\bf Récapitulation} \\
Il apparaît sur cet exemple simplifié qu'il n'est pas toujours possible de transformer
en glace toutes les précipitations formées en-dessous de 0$^{\circ}$C. Il faut considérer
les cas où les précipitations sont nécessairement mixtes.
Par rapport à la programation simpliste qui a été faite à ce jour dans Fisrtilp, il
reste deux améliorations à réaliser. D'abord, refaire le présent calcul formel en prenant
en compte le temps de relaxation de la conversion en précipitations. Ensuite, coder la
résolution itérative des équations donnant $q_p$ et $\delta T$.
\end{document}
1db9893213a5085afb6060677b3643dde25cf9e0
9
8
2020-11-15T11:54:32Z
Lfairhead
1
wikitext
text/x-wiki
$$
\newcommand{\Condl}{Conditions aux limites }
\newcommand{\condl}{conditions aux limites }
\newcommand{\cad}{c'est-\`a-dire }
\newcommand{\Cad}{C'est-\`a-dire }
\newcommand{\tem}{temp\'erature }
\newcommand{\tems}{temp\'eratures }
\newcommand{\Tpni}{T_{\text{p,ni}}}
\newcommand{\Tp}{T_{\text{p}}}
\newcommand{\qpni}{q_{\text{p,ni}}}
\newcommand{\qp}{q_{\text{p}}}
\newcommand{\qsati}{q_{\text{sat,i}}}
\newcommand{\qsat}{q_{\text{sat}}}
\newcommand{\hpni}{h_{\text{p,ni}}}
\newcommand{\hp}{h_{\text{p}}}
\newcommand{\nab}{\vec{\nabla}}
\newcommand{\V}{\vec{V}}
\newcommand{\Vt}{\vec{\tilde{V}}}
\newcommand{\F}{\vec{F}}
\newcommand{\NF}{\|\vec{F}\|}
\newcommand{\CD}{C_D}
\newcommand{\pt}{\tilde{p}}
\newcommand{\Dt}{\tilde{D}}
\newcommand{\thetat}{\tilde{\theta}}
\newcommand{\alphat}{\tilde{\alpha}}
\newcommand{\Mt}{\tilde{M}}
\newcommand{\rhot}{\tilde{\rho}}
\newcommand{\qt}{\tilde{q}}
\newcommand{\Tt}{\tilde{T}}
\newcommand{\wt}{\tilde{w}}
\newcommand{\wbar}{\overline{w}}
\newcommand{\ubar}{\overline{u}}
\newcommand{\vbar}{\overline{v}}
\newcommand{\qbar}{\overline{q_v}}
\newcommand{\omgb}{\overline{\omega}}
\newcommand{\omgwb}{\overline{\omega_w}}
\newcommand{\omgub}{\overline{\omega_u}}
\newcommand{\omgxb}{\overline{\omega_x}}
\newcommand{\thetab}{\overline{\theta}}
\newcommand{\qvb}{\overline{q_v}}
\newcommand{\qvwb}{\overline{q_{vw}}}
\newcommand{\qvxb}{\overline{q_{vx}}}
\newcommand{\qvw}{q_{vw}}
\newcommand{\qvx}{q_{vx}}
\newcommand{\thetawb}{\overline{\theta_w}}
\newcommand{\thetaub}{\overline{\theta_u}}
\newcommand{\thetaxb}{\overline{\theta_x}}
\newcommand{\uwb}{\overline{u_w}}
\newcommand{\uub}{\overline{u_u}}
\newcommand{\uxb}{\overline{u_x}}
\newcommand{\vwb}{\overline{v_w}}
\newcommand{\vub}{\overline{v_u}}
\newcommand{\vxb}{\overline{v_x}}
\newcommand{\vwhat}{\hat{v_w}}
\newcommand{\vuhat}{\hat{v_u}}
\newcommand{\vxhat}{\hat{v_x}}
\newcommand{\Kb}{\overline{K}}
\newcommand{\alphab}{\overline{\alpha}}
\newcommand{\alphawb}{\overline{\alpha_w}}
\newcommand{\alphaub}{\overline{\alpha_u}}
\newcommand{\alphaxb}{\overline{\alpha_x}}
\newcommand{\rhob}{\overline{\rho}}
\newcommand{\sigw}{\ensuremath{\sigma_w}}
\newcommand{\dlt}{\delta t}
\newcommand{\Xrz}{X_{r}}
\newcommand{\Xr}[1]{X_{r(#1)}}
\newcommand{\Xrpz}{X_{rp}}
\newcommand{\Xrp}[1]{X_{rp(#1)}}
\newcommand{\Xrvz}{X_{rv}}
\newcommand{\Xrv}[1]{X_{rv(#1)}}
\newcommand{\Xrhz}{\hat{X}_{r}}
\newcommand{\Xrh}[1]{\hat{X}_{r(#1)}}
%%%\newcommand{\dlts2}{\frac{\dlt}{2}}
\newcommand{\dsdlt}{\frac{2}{\dlt}}
\newcommand{\vphi}{\vec{\varphi}}
\newcommand{\veta}{\vec{\eta}}
\newcommand{\vtheta}{\vec{\theta}}
\newcommand{\veps}{\vec{\varepsilon}}
\newcommand{\delphi}{\vec{\delta \varphi}}
\newcommand{\vG}{\vec{G}}
\newcommand{\vf}{\vec{f}}
\newcommand{\n}{\vec{n}}
\newcommand{\rl}{\rho_{l}}
\newcommand{\rv}{\rho_{v}}
\newcommand{\vv}{\vec{V}_{v}}
\newcommand{\vl}{\vec{V}_{l}}
%%%\newcommand{\v}{\vec{V}}
\newcommand{\g}{\vec{g}}
\newcommand{\dsdt}{\frac {\partial }{\partial t}}
\newcommand{\dst}{\partial_t}
\newcommand{\dsp}{\partial_p}
\newcommand{\dsz}{\partial_z}
\newcommand{\dsy}{\partial_y}
\newcommand{\dsx}{\partial_x}
\newcommand{\dsth}{\partial_{\theta}}
\newcommand{\dsq}{\partial_q}
\newcommand{\dsv}{\partial_V}
\newcommand{\dalpha}{\delta \alpha}
\newcommand{\dw}{\delta w}
\newcommand{\dqv}{\delta q_v}
\newcommand{\dtheta}{\delta \theta}
\newcommand{\domg}{\delta \omega}
\newcommand{\domgcv}{\delta \omega^{\text{cv}}}
%%\newcommand{\domgtop}{\delta \omega_{\text{top}}}
\newcommand{\domgtop}{\delta \omega_{w}}
%%\newcommand{\domgupper}{\delta \omega_{\text{upper}}}
\newcommand{\domgupper}{\delta \omega_{h}}
%%\newcommand{\ptop}{p_{\text{top}}}
\newcommand{\ptop}{p_{w}}
%%\newcommand{\pupper}{p_{\text{upper}}}
\newcommand{\pupper}{p_{h}}
%%\newcommand{\htop}{h_{\text{top}}}
\newcommand{\htop}{h_{w}}
%%\newcommand{\hupper}{h_{\text{upper}}}
\newcommand{\hupper}{h_{h}}
\newcommand{\intw}{\int_{\Sigma_w}}
\newcommand{\intu}{\int_{\Sigma_u}}
\newcommand{\intx}{\int_{\Sigma_x}}
\newcommand{\inte}{\int_{\Sigma_e}}
\newcommand{\intp}{\int_{\Sigma'}}
\newcommand{\intgw}{\int_{\Gamma_{w,in}}}
\newcommand{\intgwp}{\int_{\Gamma_{w,in}^+}}
\newcommand{\intgwm}{\int_{\Gamma_{w,in}^-}}
\newcommand{\intg}{\int_{\Gamma}}
\newcommand{\intgp}{\int_{\Gamma'}}
\newcommand{\intgpe}{\int_{\Gamma'_e}}
\newcommand{\intgpu}{\int_{\Gamma'_u}}
\newcommand{\intgpx}{\int_{\Gamma'_x}}
\newcommand{\intgpw}{\int_{\Gamma'_w}}
\newcommand{\kgw}{k_{\text{gw}}}
\newcommand{\taugw}{\tau_{\text{gw}}}
\newcommand{\klift}{k_{\text{lift}}}
%%\newcommand{\kliftw}{k_{\text{lift,wk}}}
\newcommand{\kliftw}{\mathcal{E}_{\text{lift}}^{\text{wk}}}
\newcommand{\Eliftw}{\mathcal{E}_{\text{lift}}^{\text{wk}}}
\newcommand{\Pb}{\ensuremath{P_{\text{buoy}}}}
\newcommand{\Pliftw}{\ensuremath{P_{\text{lift}}^{\text{wk}}}}
\newcommand{\Pliftwh}{\ensuremath{\widehat{P_{\text{lift}}^{\text{wk}}}}}
\newcommand{\Pliftwp}{\ensuremath{\widetilde{P_{\text{lift}}^{\text{wk}}}}}
\newcommand{\LG}{\ensuremath{L_{\Gamma}}}
\newcommand{\LGh}{\ensuremath{\widehat{L_{\Gamma}}}}
\newcommand{\LGp}{\ensuremath{\widetilde{L_{\Gamma}}}}
\newcommand{\LGt}{\ensuremath{\widetilde{L_{\Gamma}}}}
\newcommand{\Dw}{\ensuremath{D_{\text{wk}}}}
\newcommand{\QI}{\ensuremath{Q_1}}
\newcommand{\DQI}{\ensuremath{\delta Q_1}}
\newcommand{\QIsat}{\ensuremath{Q_{1}^{\text{sat}}}}
\newcommand{\QIcvsat}{\ensuremath{Q_{1}^{\text{cv,sat}}}}
\newcommand{\QIunsat}{\ensuremath{Q_{1}^{\text{unsat}}}}
\newcommand{\QIcvunsat}{\ensuremath{Q_{1}^{\text{cv,unsat}}}}
\newcommand{\QIIsat}{\ensuremath{Q_{2}^{\text{sat}}}}
\newcommand{\QIIcvsat}{\ensuremath{Q_{2}^{\text{cv,sat}}}}
\newcommand{\QIIunsat}{\ensuremath{Q_{2}^{\text{unsat}}}}
\newcommand{\QIIcvunsat}{\ensuremath{Q_{2}^{\text{cv,unsat}}}}
\newcommand{\QIw}{\ensuremath{Q_{1,w}}}
\newcommand{\QIcvw}{\ensuremath{Q_{1,w}^{\text{cv}}}}
\newcommand{\QIx}{\ensuremath{Q_{1,x}}}
\newcommand{\QIcvx}{\ensuremath{Q_{1,x}^{\text{cv}}}}
\newcommand{\QIcv}{\ensuremath{Q_{1}^{\text{cv}}}}
\newcommand{\DQIcv}{\ensuremath{\delta Q_{1}^{\text{cv}}}}
\newcommand{\QIbl}{\ensuremath{Q_{1}^{\text{bl}}}}
\newcommand{\QIcl}{\ensuremath{Q_{1}^{\text{cl}}}}
\newcommand{\QIwk}{\ensuremath{Q_{1}^{\text{wk}}}}
\newcommand{\DQIwk}{\ensuremath{\delta Q_{1}^{\text{wk}}}}
\newcommand{\QIp}{\ensuremath{Q_{1,p}}}
\newcommand{\QIS}{\ensuremath{\mathcal{Q}_{1}^S}}
\newcommand{\QID}{\ensuremath{\mathcal{Q}_{1}^D}}
\newcommand{\QIT}{\ensuremath{\mathcal{Q}_{1}^T}}
\newcommand{\QIE}{\ensuremath{\mathcal{Q}_{1}^E}}
\newcommand{\QII}{\ensuremath{Q_2}}
\newcommand{\DQII}{\ensuremath{\delta Q_2}}
\newcommand{\QIIw}{\ensuremath{Q_{2,w}}}
\newcommand{\QIIcvw}{\ensuremath{Q_{2,w}^{\text{cv}}}}
\newcommand{\QIIx}{\ensuremath{Q_{2,x}}}
\newcommand{\QIIcvx}{\ensuremath{Q_{2,x}^{\text{cv}}}}
\newcommand{\QIIcv}{\ensuremath{Q_{2}^{\text{cv}}}}
\newcommand{\DQIIcv}{\ensuremath{\delta Q_{2}^{\text{cv}}}}
\newcommand{\QIIbl}{\ensuremath{Q_{2}^{\text{bl}}}}
\newcommand{\QIIcl}{\ensuremath{Q_{2}^{\text{cl}}}}
\newcommand{\QIIwk}{\ensuremath{Q_{2}^{\text{wk}}}}
\newcommand{\DQIIwk}{\ensuremath{\delta Q_{2}^{\text{wk}}}}
\newcommand{\QIIp}{\ensuremath{Q_{2,p}}}
\newcommand{\QIIS}{\ensuremath{\mathcal{Q}_{2}^S}}
\newcommand{\QIID}{\ensuremath{\mathcal{Q}_{2}^D}}
\newcommand{\QIIT}{\ensuremath{\mathcal{Q}_{2}^T}}
\newcommand{\QIIE}{\ensuremath{\mathcal{Q}_{2}^E}}
\newcommand{\Sig}{\ensuremath{\Sigma\;}}
\newcommand{\Sigp}{\ensuremath{\Sigma'\;}}
\newcommand{\Sigw}{\ensuremath{\Sigma_w\;}}
\newcommand{\Sige}{\ensuremath{\Sigma_e}}
\newcommand{\Sigu}{\ensuremath{\Sigma_u}}
\newcommand{\Sigx}{\ensuremath{\Sigma_x}}
\newcommand{\Wb}{\ensuremath{W_{\text{buoy}}}}
\newcommand{\Wbb}{\bar{\bar{W}}}
\newcommand{\wa}{\langle w\rangle}
\newcommand{\wpa}{\langle w'\rangle}
\newcommand{\wwa}{\langle w^2\rangle}
\newcommand{\wwwa}{\langle w^3\rangle}
\newcommand{\wwpa}{\langle w^{\prime\prime\prime 2}\rangle}
$$
\begin{center}
\large {\bf Précipitations neigeuses pour des températures négatives proches de
0$^{\circ}$C~: \\
calculs approchés pour une maille horizontalement homogène.
(March 2016)}
\\[1.0cm]
{\bf LMDZ }
\today
\\[1.0cm]
\hrule
\end{center}
\vspace{.7cm}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --0--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Nous considérons une couche nuageuse homogène de température négative T, proche de la
température de fusion $T_f$. L'eau nuageuse est alors essentiellement sous forme liquide
et nous allons négliger la phase glace~:
$$
q_l = q_t - \qsati(T)
$$
où l'humidité saturante $\qsat$ est prise sur la glace. Cependant, les deux humidités
saturantes étant très proches au voisinages de $T_f$, nous allons, pour simplifier,
prendre pour humidité saturante $\qsat$ sur l'eau liquide dans tous les calculs qui
suivent.
La conversion en précipitation est décrite par un processus à seuil~: l'eau nuageuse en
excès par rapport à un seuil $q_{lt}$ est convertie en précipitation avec un temps de
relaxation $\tau_{pr}$. Pour simplifier à nouveau, nous allons considérer cette conversion
comme instantanée. La concentration massique de l'eau précipitante $q_p$ s'écrit alors~:
$$
q_p = q_t - q_{lt}
$$
Finalement, l'effet Bergeron est grossièrement décrit en convertissant en glace toutes
les précipitations formées au-dessous de $T_f$. Ceci entraîne une élévation de température
$\delta T$ telle que~:
$$
C_p \delta T = L'_f q_p
$$
où~:
\begin{equation}
L'_f\;=
\left \lbrace
\begin{array}{ll}
L_f & \text{si} \quad T+\delta T\;\leq\;T_f \\
0 & \text{si} \quad T+\delta T\;>\;T_f \\
\end{array}
\right .
\end{equation}
Partant d'une température $T$ on cherche donc une variation $\delta T$ et une
concentration massique en précipitation $q_p$ telles que~:
\begin{equation}
\left \lbrace
\begin{array}{ll}
q_l & =\; q_t-\qsat(T+\delta T) \\
q_p & =\; q_l-q_{lt} \\
C_p \delta T & =\;L'_f q_p \\
\end{array}
\right .
\end{equation}
soit~:
\begin{equation}
\left \lbrace
\begin{array}{ll}
q_p & =\; q_t-q_{lt}-\qsat(t+\delta T) \\
C_p \delta T & =\;L'_f q_p \\
\end{array}
\right .
\end{equation}
La résolution de ce système de deux équations à deux inconnues ($q_p$ et $\delta T$)
peut se représenter graphiquement (pour simplifier, j'ai considéré la fonction $\qsat(T)$
comme linéaire).
\psset{unit=0.1\linewidth}
\begin{pspicture}(8,3.5)
%axe
\psline{->}(2.,1.0)(7.8,1.0)
\rput(7.7,0.8){$\delta T$}
\psline{->}(2.,1.0)(2.,3.3)
\rput(1.8,3.2){$q_p$}
%qsat
\psline(2.0,2.5)(6.0,1.05)
\rput(1.0,2.5){$q_t-q_{lt}-\qsat(T)$}
\rput(4.5,2.8){$q_p=q_t-q_{lt}-\qsat(T+\delta T)$}
\psline[linewidth=0.3pt]{->}(4.,2.6)(3.0,2.25)
%Delta T
\psline[linewidth=2.5pt](2.0,1.0)(4.0,2.0)
\psline[linewidth=2.5pt](4.0,2.0)(4.0,1.0)
\psline[linewidth=2.5pt](4.0,1.0)(7.5,1.0)
\psline[linestyle=dashed](2.0,2.0)(4.0,2.0)
\rput(1.30,1.9){$\frac{C_p(T_f-T)}{L_f}$}
\rput(3.8,0.8){$T_f-T$}
%Intersections
\pscircle[linewidth=0.3pt](3.74,1.87){0.1}
\rput(6,1.8){$q_t-q_{lt}-\qsat(T_f)$}
\psline[linewidth=0.3pt]{->}(5.,1.8)(4.1,1.8)
\end{pspicture}
%%
Comme la courbe de la deuxième équations (qui pourrait s'appeller la courbe de chauffage)
ne dépasse pas $q_p=\frac{C_p(T_f-T)}{L_f}$, valeur atteinte pour $\delta T = T_f-T$, on
voit qu'il ne peut y avoir de solution que si
$q_t-q_{lt}-\qsat(T_f)\;\leq\;\frac{C_p(T_f-T)}{L_f}$. Si cette inégalité n'est pas
vérifiée, alors la conversion éventuelle de toutes les précipitations en glace porterait
la température du nuage au-dessus de $T_f$, ce qui serait incompatible avec la conversion
des précipitations en glace.
Proposition~: lorsque $q_t-q_{lt}-\qsat(T_f)\;>\;\frac{C_p(T_f-T)}{L_f}$ il ne faut
convertir en glace qu'une partie des précipitations, de façon que la température soit
amenée à $T_f$, le reste des précipitation restant sous forme de pluie. \\
%%
\psset{unit=0.1\linewidth}
\begin{pspicture}(8,3.7)
%axe
\psline{->}(2.,1.0)(7.8,1.0)
\rput(7.7,0.8){$\delta T$}
\psline{->}(2.,1.0)(2.,3.5)
\rput(1.8,3.4){$q_p$}
%qsat
\psline(2.0,3.0)(7.0,1.05)
\rput(1.0,3.0){$q_t-q_{lt}-\qsat(T)$}
%Delta T
\psline[linewidth=2.5pt](2.0,1.0)(4.0,2.0)
\psline[linewidth=2.5pt](4.0,2.0)(4.0,1.0)
\psline[linewidth=2.5pt](4.0,1.0)(7.5,1.0)
\psline[linestyle=dashed](2.0,2.0)(4.0,2.0)
\rput(1.30,1.9){$\frac{C_p(T_f-T)}{L_f}$}
\rput(3.8,0.8){$T_f-T$}
%Intersection
\psline(4.,2.)(4.,2.22)
\rput(6,2.22){$q_t-q_{lt}-\qsat(T_f)$}
\psline[linewidth=0.3pt]{->}(5.,2.22)(4.1,2.22)
\psline{<->}(4.1,1.)(4.1,2.)
\rput(4.5,1.5){glace}
\psline{<->}(3.9,2.)(3.9,2.22)
\rput(3.3,2.1){liquide}
\end{pspicture}
%%
{\bf Récapitulation} \\
Il apparaît sur cet exemple simplifié qu'il n'est pas toujours possible de transformer
en glace toutes les précipitations formées en-dessous de 0$^{\circ}$C. Il faut considérer
les cas où les précipitations sont nécessairement mixtes.
Par rapport à la programation simpliste qui a été faite à ce jour dans Fisrtilp, il
reste deux améliorations à réaliser. D'abord, refaire le présent calcul formel en prenant
en compte le temps de relaxation de la conversion en précipitations. Ensuite, coder la
résolution itérative des équations donnant $q_p$ et $\delta T$.
\end{document}
b957ec8785eb8280586e67dbbae1e0c36cf01aa6
41
9
2021-01-22T22:21:55Z
Lfairhead
1
wikitext
text/x-wiki
$$
\newcommand{\Condl}{Conditions aux limites }
\newcommand{\condl}{conditions aux limites }
\newcommand{\cad}{c'est-\`a-dire }
\newcommand{\Cad}{C'est-\`a-dire }
\newcommand{\tem}{temp\'erature }
\newcommand{\tems}{temp\'eratures }
\newcommand{\Tpni}{T_{\text{p,ni}}}
\newcommand{\Tp}{T_{\text{p}}}
\newcommand{\qpni}{q_{\text{p,ni}}}
\newcommand{\qp}{q_{\text{p}}}
\newcommand{\qsati}{q_{\text{sat,i}}}
\newcommand{\qsat}{q_{\text{sat}}}
\newcommand{\hpni}{h_{\text{p,ni}}}
\newcommand{\hp}{h_{\text{p}}}
\newcommand{\nab}{\vec{\nabla}}
\newcommand{\V}{\vec{V}}
\newcommand{\Vt}{\vec{\tilde{V}}}
\newcommand{\F}{\vec{F}}
\newcommand{\NF}{\|\vec{F}\|}
\newcommand{\CD}{C_D}
\newcommand{\pt}{\tilde{p}}
\newcommand{\Dt}{\tilde{D}}
\newcommand{\thetat}{\tilde{\theta}}
\newcommand{\alphat}{\tilde{\alpha}}
\newcommand{\Mt}{\tilde{M}}
\newcommand{\rhot}{\tilde{\rho}}
\newcommand{\qt}{\tilde{q}}
\newcommand{\Tt}{\tilde{T}}
\newcommand{\wt}{\tilde{w}}
\newcommand{\wbar}{\overline{w}}
\newcommand{\ubar}{\overline{u}}
\newcommand{\vbar}{\overline{v}}
\newcommand{\qbar}{\overline{q_v}}
\newcommand{\omgb}{\overline{\omega}}
\newcommand{\omgwb}{\overline{\omega_w}}
\newcommand{\omgub}{\overline{\omega_u}}
\newcommand{\omgxb}{\overline{\omega_x}}
\newcommand{\thetab}{\overline{\theta}}
\newcommand{\qvb}{\overline{q_v}}
\newcommand{\qvwb}{\overline{q_{vw}}}
\newcommand{\qvxb}{\overline{q_{vx}}}
\newcommand{\qvw}{q_{vw}}
\newcommand{\qvx}{q_{vx}}
\newcommand{\thetawb}{\overline{\theta_w}}
\newcommand{\thetaub}{\overline{\theta_u}}
\newcommand{\thetaxb}{\overline{\theta_x}}
\newcommand{\uwb}{\overline{u_w}}
\newcommand{\uub}{\overline{u_u}}
\newcommand{\uxb}{\overline{u_x}}
\newcommand{\vwb}{\overline{v_w}}
\newcommand{\vub}{\overline{v_u}}
\newcommand{\vxb}{\overline{v_x}}
\newcommand{\vwhat}{\hat{v_w}}
\newcommand{\vuhat}{\hat{v_u}}
\newcommand{\vxhat}{\hat{v_x}}
\newcommand{\Kb}{\overline{K}}
\newcommand{\alphab}{\overline{\alpha}}
\newcommand{\alphawb}{\overline{\alpha_w}}
\newcommand{\alphaub}{\overline{\alpha_u}}
\newcommand{\alphaxb}{\overline{\alpha_x}}
\newcommand{\rhob}{\overline{\rho}}
\newcommand{\sigw}{\ensuremath{\sigma_w}}
\newcommand{\dlt}{\delta t}
\newcommand{\Xrz}{X_{r}}
\newcommand{\Xr}[1]{X_{r(#1)}}
\newcommand{\Xrpz}{X_{rp}}
\newcommand{\Xrp}[1]{X_{rp(#1)}}
\newcommand{\Xrvz}{X_{rv}}
\newcommand{\Xrv}[1]{X_{rv(#1)}}
\newcommand{\Xrhz}{\hat{X}_{r}}
\newcommand{\Xrh}[1]{\hat{X}_{r(#1)}}
%%%\newcommand{\dlts2}{\frac{\dlt}{2}}
\newcommand{\dsdlt}{\frac{2}{\dlt}}
\newcommand{\vphi}{\vec{\varphi}}
\newcommand{\veta}{\vec{\eta}}
\newcommand{\vtheta}{\vec{\theta}}
\newcommand{\veps}{\vec{\varepsilon}}
\newcommand{\delphi}{\vec{\delta \varphi}}
\newcommand{\vG}{\vec{G}}
\newcommand{\vf}{\vec{f}}
\newcommand{\n}{\vec{n}}
\newcommand{\rl}{\rho_{l}}
\newcommand{\rv}{\rho_{v}}
\newcommand{\vv}{\vec{V}_{v}}
\newcommand{\vl}{\vec{V}_{l}}
%%%\newcommand{\v}{\vec{V}}
\newcommand{\g}{\vec{g}}
\newcommand{\dsdt}{\frac {\partial }{\partial t}}
\newcommand{\dst}{\partial_t}
\newcommand{\dsp}{\partial_p}
\newcommand{\dsz}{\partial_z}
\newcommand{\dsy}{\partial_y}
\newcommand{\dsx}{\partial_x}
\newcommand{\dsth}{\partial_{\theta}}
\newcommand{\dsq}{\partial_q}
\newcommand{\dsv}{\partial_V}
\newcommand{\dalpha}{\delta \alpha}
\newcommand{\dw}{\delta w}
\newcommand{\dqv}{\delta q_v}
\newcommand{\dtheta}{\delta \theta}
\newcommand{\domg}{\delta \omega}
\newcommand{\domgcv}{\delta \omega^{\text{cv}}}
%%\newcommand{\domgtop}{\delta \omega_{\text{top}}}
\newcommand{\domgtop}{\delta \omega_{w}}
%%\newcommand{\domgupper}{\delta \omega_{\text{upper}}}
\newcommand{\domgupper}{\delta \omega_{h}}
%%\newcommand{\ptop}{p_{\text{top}}}
\newcommand{\ptop}{p_{w}}
%%\newcommand{\pupper}{p_{\text{upper}}}
\newcommand{\pupper}{p_{h}}
%%\newcommand{\htop}{h_{\text{top}}}
\newcommand{\htop}{h_{w}}
%%\newcommand{\hupper}{h_{\text{upper}}}
\newcommand{\hupper}{h_{h}}
\newcommand{\intw}{\int_{\Sigma_w}}
\newcommand{\intu}{\int_{\Sigma_u}}
\newcommand{\intx}{\int_{\Sigma_x}}
\newcommand{\inte}{\int_{\Sigma_e}}
\newcommand{\intp}{\int_{\Sigma'}}
\newcommand{\intgw}{\int_{\Gamma_{w,in}}}
\newcommand{\intgwp}{\int_{\Gamma_{w,in}^+}}
\newcommand{\intgwm}{\int_{\Gamma_{w,in}^-}}
\newcommand{\intg}{\int_{\Gamma}}
\newcommand{\intgp}{\int_{\Gamma'}}
\newcommand{\intgpe}{\int_{\Gamma'_e}}
\newcommand{\intgpu}{\int_{\Gamma'_u}}
\newcommand{\intgpx}{\int_{\Gamma'_x}}
\newcommand{\intgpw}{\int_{\Gamma'_w}}
\newcommand{\kgw}{k_{\text{gw}}}
\newcommand{\taugw}{\tau_{\text{gw}}}
\newcommand{\klift}{k_{\text{lift}}}
%%\newcommand{\kliftw}{k_{\text{lift,wk}}}
\newcommand{\kliftw}{\mathcal{E}_{\text{lift}}^{\text{wk}}}
\newcommand{\Eliftw}{\mathcal{E}_{\text{lift}}^{\text{wk}}}
\newcommand{\Pb}{\ensuremath{P_{\text{buoy}}}}
\newcommand{\Pliftw}{\ensuremath{P_{\text{lift}}^{\text{wk}}}}
\newcommand{\Pliftwh}{\ensuremath{\widehat{P_{\text{lift}}^{\text{wk}}}}}
\newcommand{\Pliftwp}{\ensuremath{\widetilde{P_{\text{lift}}^{\text{wk}}}}}
\newcommand{\LG}{\ensuremath{L_{\Gamma}}}
\newcommand{\LGh}{\ensuremath{\widehat{L_{\Gamma}}}}
\newcommand{\LGp}{\ensuremath{\widetilde{L_{\Gamma}}}}
\newcommand{\LGt}{\ensuremath{\widetilde{L_{\Gamma}}}}
\newcommand{\Dw}{\ensuremath{D_{\text{wk}}}}
\newcommand{\QI}{\ensuremath{Q_1}}
\newcommand{\DQI}{\ensuremath{\delta Q_1}}
\newcommand{\QIsat}{\ensuremath{Q_{1}^{\text{sat}}}}
\newcommand{\QIcvsat}{\ensuremath{Q_{1}^{\text{cv,sat}}}}
\newcommand{\QIunsat}{\ensuremath{Q_{1}^{\text{unsat}}}}
\newcommand{\QIcvunsat}{\ensuremath{Q_{1}^{\text{cv,unsat}}}}
\newcommand{\QIIsat}{\ensuremath{Q_{2}^{\text{sat}}}}
\newcommand{\QIIcvsat}{\ensuremath{Q_{2}^{\text{cv,sat}}}}
\newcommand{\QIIunsat}{\ensuremath{Q_{2}^{\text{unsat}}}}
\newcommand{\QIIcvunsat}{\ensuremath{Q_{2}^{\text{cv,unsat}}}}
\newcommand{\QIw}{\ensuremath{Q_{1,w}}}
\newcommand{\QIcvw}{\ensuremath{Q_{1,w}^{\text{cv}}}}
\newcommand{\QIx}{\ensuremath{Q_{1,x}}}
\newcommand{\QIcvx}{\ensuremath{Q_{1,x}^{\text{cv}}}}
\newcommand{\QIcv}{\ensuremath{Q_{1}^{\text{cv}}}}
\newcommand{\DQIcv}{\ensuremath{\delta Q_{1}^{\text{cv}}}}
\newcommand{\QIbl}{\ensuremath{Q_{1}^{\text{bl}}}}
\newcommand{\QIcl}{\ensuremath{Q_{1}^{\text{cl}}}}
\newcommand{\QIwk}{\ensuremath{Q_{1}^{\text{wk}}}}
\newcommand{\DQIwk}{\ensuremath{\delta Q_{1}^{\text{wk}}}}
\newcommand{\QIp}{\ensuremath{Q_{1,p}}}
\newcommand{\QIS}{\ensuremath{\mathcal{Q}_{1}^S}}
\newcommand{\QID}{\ensuremath{\mathcal{Q}_{1}^D}}
\newcommand{\QIT}{\ensuremath{\mathcal{Q}_{1}^T}}
\newcommand{\QIE}{\ensuremath{\mathcal{Q}_{1}^E}}
\newcommand{\QII}{\ensuremath{Q_2}}
\newcommand{\DQII}{\ensuremath{\delta Q_2}}
\newcommand{\QIIw}{\ensuremath{Q_{2,w}}}
\newcommand{\QIIcvw}{\ensuremath{Q_{2,w}^{\text{cv}}}}
\newcommand{\QIIx}{\ensuremath{Q_{2,x}}}
\newcommand{\QIIcvx}{\ensuremath{Q_{2,x}^{\text{cv}}}}
\newcommand{\QIIcv}{\ensuremath{Q_{2}^{\text{cv}}}}
\newcommand{\DQIIcv}{\ensuremath{\delta Q_{2}^{\text{cv}}}}
\newcommand{\QIIbl}{\ensuremath{Q_{2}^{\text{bl}}}}
\newcommand{\QIIcl}{\ensuremath{Q_{2}^{\text{cl}}}}
\newcommand{\QIIwk}{\ensuremath{Q_{2}^{\text{wk}}}}
\newcommand{\DQIIwk}{\ensuremath{\delta Q_{2}^{\text{wk}}}}
\newcommand{\QIIp}{\ensuremath{Q_{2,p}}}
\newcommand{\QIIS}{\ensuremath{\mathcal{Q}_{2}^S}}
\newcommand{\QIID}{\ensuremath{\mathcal{Q}_{2}^D}}
\newcommand{\QIIT}{\ensuremath{\mathcal{Q}_{2}^T}}
\newcommand{\QIIE}{\ensuremath{\mathcal{Q}_{2}^E}}
\newcommand{\Sig}{\ensuremath{\Sigma\;}}
\newcommand{\Sigp}{\ensuremath{\Sigma'\;}}
\newcommand{\Sigw}{\ensuremath{\Sigma_w\;}}
\newcommand{\Sige}{\ensuremath{\Sigma_e}}
\newcommand{\Sigu}{\ensuremath{\Sigma_u}}
\newcommand{\Sigx}{\ensuremath{\Sigma_x}}
\newcommand{\Wb}{\ensuremath{W_{\text{buoy}}}}
\newcommand{\Wbb}{\bar{\bar{W}}}
\newcommand{\wa}{\langle w\rangle}
\newcommand{\wpa}{\langle w'\rangle}
\newcommand{\wwa}{\langle w^2\rangle}
\newcommand{\wwwa}{\langle w^3\rangle}
\newcommand{\wwpa}{\langle w^{\prime\prime\prime 2}\rangle}
$$
== Précipitations neigeuses pour des températures négatives proches de 0°C: calculs approchés pour une maille horizontalement homogène. ==
(Mars 2016)
Nous considérons une couche nuageuse homogène de température négative T, proche de la
température de fusion $$T_f$$. L'eau nuageuse est alors essentiellement sous forme liquide
et nous allons négliger la phase glace:
$$
q_l = q_t - \qsati(T)
$$
où l'humidité saturante $$\qsat$$ est prise sur la glace. Cependant, les deux humidités
saturantes étant très proches au voisinages de $$T_f$$, nous allons, pour simplifier,
prendre pour humidité saturante $$\qsat$$ sur l'eau liquide dans tous les calculs qui
suivent.
La conversion en précipitation est décrite par un processus à seuil~: l'eau nuageuse en
excès par rapport à un seuil $$q_{lt}$$ est convertie en précipitation avec un temps de
relaxation $$\tau_{pr}$$. Pour simplifier à nouveau, nous allons considérer cette conversion
comme instantanée. La concentration massique de l'eau précipitante $$q_p$$ s'écrit alors:
$$
q_p = q_t - q_{lt}
$$
Finalement, l'effet Bergeron est grossièrement décrit en convertissant en glace toutes
les précipitations formées au-dessous de $$T_f$$. Ceci entraîne une élévation de température
$$\delta T$$ telle que~:
$$
C_p \delta T = L'_f q_p
$$
où:
\begin{equation}
L'_f\;=
\left \lbrace
\begin{array}{ll}
L_f & \text{si} \quad T+\delta T\;\leq\;T_f \\
0 & \text{si} \quad T+\delta T\;>\;T_f \\
\end{array}
\right .
\end{equation}
Partant d'une température $$T$$ on cherche donc une variation $$\delta T$$ et une
concentration massique en précipitation $$q_p$$ telles que:
\begin{equation}
\left \lbrace
\begin{array}{ll}
q_l & =\; q_t-\qsat(T+\delta T) \\
q_p & =\; q_l-q_{lt} \\
C_p \delta T & =\;L'_f q_p \\
\end{array}
\right .
\end{equation}
soit:
\begin{equation}
\left \lbrace
\begin{array}{ll}
q_p & =\; q_t-q_{lt}-\qsat(t+\delta T) \\
C_p \delta T & =\;L'_f q_p \\
\end{array}
\right .
\end{equation}
La résolution de ce système de deux équations à deux inconnues ($$q_p$$ et $$\delta T$$)
peut se représenter graphiquement (pour simplifier, j'ai considéré la fonction $$\qsat(T)$$
comme linéaire).
\psset{unit=0.1\linewidth}
\begin{pspicture}(8,3.5)
%axe
\psline{->}(2.,1.0)(7.8,1.0)
\rput(7.7,0.8){$\delta T$}
\psline{->}(2.,1.0)(2.,3.3)
\rput(1.8,3.2){$q_p$}
%qsat
\psline(2.0,2.5)(6.0,1.05)
\rput(1.0,2.5){$q_t-q_{lt}-\qsat(T)$}
\rput(4.5,2.8){$q_p=q_t-q_{lt}-\qsat(T+\delta T)$}
\psline[linewidth=0.3pt]{->}(4.,2.6)(3.0,2.25)
%Delta T
\psline[linewidth=2.5pt](2.0,1.0)(4.0,2.0)
\psline[linewidth=2.5pt](4.0,2.0)(4.0,1.0)
\psline[linewidth=2.5pt](4.0,1.0)(7.5,1.0)
\psline[linestyle=dashed](2.0,2.0)(4.0,2.0)
\rput(1.30,1.9){$\frac{C_p(T_f-T)}{L_f}$}
\rput(3.8,0.8){$T_f-T$}
%Intersections
\pscircle[linewidth=0.3pt](3.74,1.87){0.1}
\rput(6,1.8){$q_t-q_{lt}-\qsat(T_f)$}
\psline[linewidth=0.3pt]{->}(5.,1.8)(4.1,1.8)
\end{pspicture}
%%
Comme la courbe de la deuxième équations (qui pourrait s'appeller la courbe de chauffage)
ne dépasse pas $$q_p=\frac{C_p(T_f-T)}{L_f}$$, valeur atteinte pour $$\delta T = T_f-T$$, on
voit qu'il ne peut y avoir de solution que si
$$q_t-q_{lt}-\qsat(T_f)\;\leq\;\frac{C_p(T_f-T)}{L_f}$$. Si cette inégalité n'est pas
vérifiée, alors la conversion éventuelle de toutes les précipitations en glace porterait
la température du nuage au-dessus de $$T_f$$, ce qui serait incompatible avec la conversion
des précipitations en glace.
Proposition: lorsque $$q_t-q_{lt}-\qsat(T_f)\;>\;\frac{C_p(T_f-T)}{L_f}$$ il ne faut
convertir en glace qu'une partie des précipitations, de façon que la température soit
amenée à $$T_f$$, le reste des précipitation restant sous forme de pluie. \\
%%
\psset{unit=0.1\linewidth}
\begin{pspicture}(8,3.7)
%axe
\psline{->}(2.,1.0)(7.8,1.0)
\rput(7.7,0.8){$\delta T$}
\psline{->}(2.,1.0)(2.,3.5)
\rput(1.8,3.4){$q_p$}
%qsat
\psline(2.0,3.0)(7.0,1.05)
\rput(1.0,3.0){$q_t-q_{lt}-\qsat(T)$}
%Delta T
\psline[linewidth=2.5pt](2.0,1.0)(4.0,2.0)
\psline[linewidth=2.5pt](4.0,2.0)(4.0,1.0)
\psline[linewidth=2.5pt](4.0,1.0)(7.5,1.0)
\psline[linestyle=dashed](2.0,2.0)(4.0,2.0)
\rput(1.30,1.9){$\frac{C_p(T_f-T)}{L_f}$}
\rput(3.8,0.8){$T_f-T$}
%Intersection
\psline(4.,2.)(4.,2.22)
\rput(6,2.22){$q_t-q_{lt}-\qsat(T_f)$}
\psline[linewidth=0.3pt]{->}(5.,2.22)(4.1,2.22)
\psline{<->}(4.1,1.)(4.1,2.)
\rput(4.5,1.5){glace}
\psline{<->}(3.9,2.)(3.9,2.22)
\rput(3.3,2.1){liquide}
\end{pspicture}
'''Récapitulation'''
Il apparaît sur cet exemple simplifié qu'il n'est pas toujours possible de transformer
en glace toutes les précipitations formées en-dessous de 0°C. Il faut considérer
les cas où les précipitations sont nécessairement mixtes.
Par rapport à la programation simpliste qui a été faite à ce jour dans Fisrtilp, il
reste deux améliorations à réaliser. D'abord, refaire le présent calcul formel en prenant
en compte le temps de relaxation de la conversion en précipitations. Ensuite, coder la
résolution itérative des équations donnant $$q_p$$ et $$\delta T$$.
[[Category:Physique]]
12e2e1b14118b489f1bda7478bad1052d2b7da00
44
41
2021-01-22T22:25:57Z
Lfairhead
1
wikitext
text/x-wiki
$$
\newcommand{\Condl}{Conditions aux limites }
\newcommand{\condl}{conditions aux limites }
\newcommand{\cad}{c'est-\`a-dire }
\newcommand{\Cad}{C'est-\`a-dire }
\newcommand{\tem}{temp\'erature }
\newcommand{\tems}{temp\'eratures }
\newcommand{\Tpni}{T_{\text{p,ni}}}
\newcommand{\Tp}{T_{\text{p}}}
\newcommand{\qpni}{q_{\text{p,ni}}}
\newcommand{\qp}{q_{\text{p}}}
\newcommand{\qsati}{q_{\text{sat,i}}}
\newcommand{\qsat}{q_{\text{sat}}}
\newcommand{\hpni}{h_{\text{p,ni}}}
\newcommand{\hp}{h_{\text{p}}}
\newcommand{\nab}{\vec{\nabla}}
\newcommand{\V}{\vec{V}}
\newcommand{\Vt}{\vec{\tilde{V}}}
\newcommand{\F}{\vec{F}}
\newcommand{\NF}{\|\vec{F}\|}
\newcommand{\CD}{C_D}
\newcommand{\pt}{\tilde{p}}
\newcommand{\Dt}{\tilde{D}}
\newcommand{\thetat}{\tilde{\theta}}
\newcommand{\alphat}{\tilde{\alpha}}
\newcommand{\Mt}{\tilde{M}}
\newcommand{\rhot}{\tilde{\rho}}
\newcommand{\qt}{\tilde{q}}
\newcommand{\Tt}{\tilde{T}}
\newcommand{\wt}{\tilde{w}}
\newcommand{\wbar}{\overline{w}}
\newcommand{\ubar}{\overline{u}}
\newcommand{\vbar}{\overline{v}}
\newcommand{\qbar}{\overline{q_v}}
\newcommand{\omgb}{\overline{\omega}}
\newcommand{\omgwb}{\overline{\omega_w}}
\newcommand{\omgub}{\overline{\omega_u}}
\newcommand{\omgxb}{\overline{\omega_x}}
\newcommand{\thetab}{\overline{\theta}}
\newcommand{\qvb}{\overline{q_v}}
\newcommand{\qvwb}{\overline{q_{vw}}}
\newcommand{\qvxb}{\overline{q_{vx}}}
\newcommand{\qvw}{q_{vw}}
\newcommand{\qvx}{q_{vx}}
\newcommand{\thetawb}{\overline{\theta_w}}
\newcommand{\thetaub}{\overline{\theta_u}}
\newcommand{\thetaxb}{\overline{\theta_x}}
\newcommand{\uwb}{\overline{u_w}}
\newcommand{\uub}{\overline{u_u}}
\newcommand{\uxb}{\overline{u_x}}
\newcommand{\vwb}{\overline{v_w}}
\newcommand{\vub}{\overline{v_u}}
\newcommand{\vxb}{\overline{v_x}}
\newcommand{\vwhat}{\hat{v_w}}
\newcommand{\vuhat}{\hat{v_u}}
\newcommand{\vxhat}{\hat{v_x}}
\newcommand{\Kb}{\overline{K}}
\newcommand{\alphab}{\overline{\alpha}}
\newcommand{\alphawb}{\overline{\alpha_w}}
\newcommand{\alphaub}{\overline{\alpha_u}}
\newcommand{\alphaxb}{\overline{\alpha_x}}
\newcommand{\rhob}{\overline{\rho}}
\newcommand{\sigw}{\ensuremath{\sigma_w}}
\newcommand{\dlt}{\delta t}
\newcommand{\Xrz}{X_{r}}
\newcommand{\Xr}[1]{X_{r(#1)}}
\newcommand{\Xrpz}{X_{rp}}
\newcommand{\Xrp}[1]{X_{rp(#1)}}
\newcommand{\Xrvz}{X_{rv}}
\newcommand{\Xrv}[1]{X_{rv(#1)}}
\newcommand{\Xrhz}{\hat{X}_{r}}
\newcommand{\Xrh}[1]{\hat{X}_{r(#1)}}
%%%\newcommand{\dlts2}{\frac{\dlt}{2}}
\newcommand{\dsdlt}{\frac{2}{\dlt}}
\newcommand{\vphi}{\vec{\varphi}}
\newcommand{\veta}{\vec{\eta}}
\newcommand{\vtheta}{\vec{\theta}}
\newcommand{\veps}{\vec{\varepsilon}}
\newcommand{\delphi}{\vec{\delta \varphi}}
\newcommand{\vG}{\vec{G}}
\newcommand{\vf}{\vec{f}}
\newcommand{\n}{\vec{n}}
\newcommand{\rl}{\rho_{l}}
\newcommand{\rv}{\rho_{v}}
\newcommand{\vv}{\vec{V}_{v}}
\newcommand{\vl}{\vec{V}_{l}}
%%%\newcommand{\v}{\vec{V}}
\newcommand{\g}{\vec{g}}
\newcommand{\dsdt}{\frac {\partial }{\partial t}}
\newcommand{\dst}{\partial_t}
\newcommand{\dsp}{\partial_p}
\newcommand{\dsz}{\partial_z}
\newcommand{\dsy}{\partial_y}
\newcommand{\dsx}{\partial_x}
\newcommand{\dsth}{\partial_{\theta}}
\newcommand{\dsq}{\partial_q}
\newcommand{\dsv}{\partial_V}
\newcommand{\dalpha}{\delta \alpha}
\newcommand{\dw}{\delta w}
\newcommand{\dqv}{\delta q_v}
\newcommand{\dtheta}{\delta \theta}
\newcommand{\domg}{\delta \omega}
\newcommand{\domgcv}{\delta \omega^{\text{cv}}}
%%\newcommand{\domgtop}{\delta \omega_{\text{top}}}
\newcommand{\domgtop}{\delta \omega_{w}}
%%\newcommand{\domgupper}{\delta \omega_{\text{upper}}}
\newcommand{\domgupper}{\delta \omega_{h}}
%%\newcommand{\ptop}{p_{\text{top}}}
\newcommand{\ptop}{p_{w}}
%%\newcommand{\pupper}{p_{\text{upper}}}
\newcommand{\pupper}{p_{h}}
%%\newcommand{\htop}{h_{\text{top}}}
\newcommand{\htop}{h_{w}}
%%\newcommand{\hupper}{h_{\text{upper}}}
\newcommand{\hupper}{h_{h}}
\newcommand{\intw}{\int_{\Sigma_w}}
\newcommand{\intu}{\int_{\Sigma_u}}
\newcommand{\intx}{\int_{\Sigma_x}}
\newcommand{\inte}{\int_{\Sigma_e}}
\newcommand{\intp}{\int_{\Sigma'}}
\newcommand{\intgw}{\int_{\Gamma_{w,in}}}
\newcommand{\intgwp}{\int_{\Gamma_{w,in}^+}}
\newcommand{\intgwm}{\int_{\Gamma_{w,in}^-}}
\newcommand{\intg}{\int_{\Gamma}}
\newcommand{\intgp}{\int_{\Gamma'}}
\newcommand{\intgpe}{\int_{\Gamma'_e}}
\newcommand{\intgpu}{\int_{\Gamma'_u}}
\newcommand{\intgpx}{\int_{\Gamma'_x}}
\newcommand{\intgpw}{\int_{\Gamma'_w}}
\newcommand{\kgw}{k_{\text{gw}}}
\newcommand{\taugw}{\tau_{\text{gw}}}
\newcommand{\klift}{k_{\text{lift}}}
%%\newcommand{\kliftw}{k_{\text{lift,wk}}}
\newcommand{\kliftw}{\mathcal{E}_{\text{lift}}^{\text{wk}}}
\newcommand{\Eliftw}{\mathcal{E}_{\text{lift}}^{\text{wk}}}
\newcommand{\Pb}{\ensuremath{P_{\text{buoy}}}}
\newcommand{\Pliftw}{\ensuremath{P_{\text{lift}}^{\text{wk}}}}
\newcommand{\Pliftwh}{\ensuremath{\widehat{P_{\text{lift}}^{\text{wk}}}}}
\newcommand{\Pliftwp}{\ensuremath{\widetilde{P_{\text{lift}}^{\text{wk}}}}}
\newcommand{\LG}{\ensuremath{L_{\Gamma}}}
\newcommand{\LGh}{\ensuremath{\widehat{L_{\Gamma}}}}
\newcommand{\LGp}{\ensuremath{\widetilde{L_{\Gamma}}}}
\newcommand{\LGt}{\ensuremath{\widetilde{L_{\Gamma}}}}
\newcommand{\Dw}{\ensuremath{D_{\text{wk}}}}
\newcommand{\QI}{\ensuremath{Q_1}}
\newcommand{\DQI}{\ensuremath{\delta Q_1}}
\newcommand{\QIsat}{\ensuremath{Q_{1}^{\text{sat}}}}
\newcommand{\QIcvsat}{\ensuremath{Q_{1}^{\text{cv,sat}}}}
\newcommand{\QIunsat}{\ensuremath{Q_{1}^{\text{unsat}}}}
\newcommand{\QIcvunsat}{\ensuremath{Q_{1}^{\text{cv,unsat}}}}
\newcommand{\QIIsat}{\ensuremath{Q_{2}^{\text{sat}}}}
\newcommand{\QIIcvsat}{\ensuremath{Q_{2}^{\text{cv,sat}}}}
\newcommand{\QIIunsat}{\ensuremath{Q_{2}^{\text{unsat}}}}
\newcommand{\QIIcvunsat}{\ensuremath{Q_{2}^{\text{cv,unsat}}}}
\newcommand{\QIw}{\ensuremath{Q_{1,w}}}
\newcommand{\QIcvw}{\ensuremath{Q_{1,w}^{\text{cv}}}}
\newcommand{\QIx}{\ensuremath{Q_{1,x}}}
\newcommand{\QIcvx}{\ensuremath{Q_{1,x}^{\text{cv}}}}
\newcommand{\QIcv}{\ensuremath{Q_{1}^{\text{cv}}}}
\newcommand{\DQIcv}{\ensuremath{\delta Q_{1}^{\text{cv}}}}
\newcommand{\QIbl}{\ensuremath{Q_{1}^{\text{bl}}}}
\newcommand{\QIcl}{\ensuremath{Q_{1}^{\text{cl}}}}
\newcommand{\QIwk}{\ensuremath{Q_{1}^{\text{wk}}}}
\newcommand{\DQIwk}{\ensuremath{\delta Q_{1}^{\text{wk}}}}
\newcommand{\QIp}{\ensuremath{Q_{1,p}}}
\newcommand{\QIS}{\ensuremath{\mathcal{Q}_{1}^S}}
\newcommand{\QID}{\ensuremath{\mathcal{Q}_{1}^D}}
\newcommand{\QIT}{\ensuremath{\mathcal{Q}_{1}^T}}
\newcommand{\QIE}{\ensuremath{\mathcal{Q}_{1}^E}}
\newcommand{\QII}{\ensuremath{Q_2}}
\newcommand{\DQII}{\ensuremath{\delta Q_2}}
\newcommand{\QIIw}{\ensuremath{Q_{2,w}}}
\newcommand{\QIIcvw}{\ensuremath{Q_{2,w}^{\text{cv}}}}
\newcommand{\QIIx}{\ensuremath{Q_{2,x}}}
\newcommand{\QIIcvx}{\ensuremath{Q_{2,x}^{\text{cv}}}}
\newcommand{\QIIcv}{\ensuremath{Q_{2}^{\text{cv}}}}
\newcommand{\DQIIcv}{\ensuremath{\delta Q_{2}^{\text{cv}}}}
\newcommand{\QIIbl}{\ensuremath{Q_{2}^{\text{bl}}}}
\newcommand{\QIIcl}{\ensuremath{Q_{2}^{\text{cl}}}}
\newcommand{\QIIwk}{\ensuremath{Q_{2}^{\text{wk}}}}
\newcommand{\DQIIwk}{\ensuremath{\delta Q_{2}^{\text{wk}}}}
\newcommand{\QIIp}{\ensuremath{Q_{2,p}}}
\newcommand{\QIIS}{\ensuremath{\mathcal{Q}_{2}^S}}
\newcommand{\QIID}{\ensuremath{\mathcal{Q}_{2}^D}}
\newcommand{\QIIT}{\ensuremath{\mathcal{Q}_{2}^T}}
\newcommand{\QIIE}{\ensuremath{\mathcal{Q}_{2}^E}}
\newcommand{\Sig}{\ensuremath{\Sigma\;}}
\newcommand{\Sigp}{\ensuremath{\Sigma'\;}}
\newcommand{\Sigw}{\ensuremath{\Sigma_w\;}}
\newcommand{\Sige}{\ensuremath{\Sigma_e}}
\newcommand{\Sigu}{\ensuremath{\Sigma_u}}
\newcommand{\Sigx}{\ensuremath{\Sigma_x}}
\newcommand{\Wb}{\ensuremath{W_{\text{buoy}}}}
\newcommand{\Wbb}{\bar{\bar{W}}}
\newcommand{\wa}{\langle w\rangle}
\newcommand{\wpa}{\langle w'\rangle}
\newcommand{\wwa}{\langle w^2\rangle}
\newcommand{\wwwa}{\langle w^3\rangle}
\newcommand{\wwpa}{\langle w^{\prime\prime\prime 2}\rangle}
$$
== Précipitations neigeuses pour des températures négatives proches de 0°C: calculs approchés pour une maille horizontalement homogène. ==
(Mars 2016)
Nous considérons une couche nuageuse homogène de température négative T, proche de la
température de fusion $$T_f$$. L'eau nuageuse est alors essentiellement sous forme liquide
et nous allons négliger la phase glace:
$$
q_l = q_t - \qsati(T)
$$
où l'humidité saturante $$\qsat$$ est prise sur la glace. Cependant, les deux humidités
saturantes étant très proches au voisinages de $$T_f$$, nous allons, pour simplifier,
prendre pour humidité saturante $$\qsat$$ sur l'eau liquide dans tous les calculs qui
suivent.
La conversion en précipitation est décrite par un processus à seuil~: l'eau nuageuse en
excès par rapport à un seuil $$q_{lt}$$ est convertie en précipitation avec un temps de
relaxation $$\tau_{pr}$$. Pour simplifier à nouveau, nous allons considérer cette conversion
comme instantanée. La concentration massique de l'eau précipitante $$q_p$$ s'écrit alors:
$$
q_p = q_t - q_{lt}
$$
Finalement, l'effet Bergeron est grossièrement décrit en convertissant en glace toutes
les précipitations formées au-dessous de $$T_f$$. Ceci entraîne une élévation de température
$$\delta T$$ telle que~:
$$
C_p \delta T = L'_f q_p
$$
où:
\begin{equation}
L'_f\;=
\left \lbrace
\begin{array}{ll}
L_f & \text{si} \quad T+\delta T\;\leq\;T_f \\
0 & \text{si} \quad T+\delta T\;>\;T_f \\
\end{array}
\right .
\end{equation}
Partant d'une température $$T$$ on cherche donc une variation $$\delta T$$ et une
concentration massique en précipitation $$q_p$$ telles que:
\begin{equation}
\left \lbrace
\begin{array}{ll}
q_l & =\; q_t-\qsat(T+\delta T) \\
q_p & =\; q_l-q_{lt} \\
C_p \delta T & =\;L'_f q_p \\
\end{array}
\right .
\end{equation}
soit:
\begin{equation}
\left \lbrace
\begin{array}{ll}
q_p & =\; q_t-q_{lt}-\qsat(t+\delta T) \\
C_p \delta T & =\;L'_f q_p \\
\end{array}
\right .
\end{equation}
La résolution de ce système de deux équations à deux inconnues ($$q_p$$ et $$\delta T$$)
peut se représenter graphiquement (pour simplifier, j'ai considéré la fonction $$\qsat(T)$$
comme linéaire).
\psset{unit=0.1\linewidth}
\begin{pspicture}(8,3.5)
%axe
\psline{->}(2.,1.0)(7.8,1.0)
\rput(7.7,0.8){$\delta T$}
\psline{->}(2.,1.0)(2.,3.3)
\rput(1.8,3.2){$q_p$}
%qsat
\psline(2.0,2.5)(6.0,1.05)
\rput(1.0,2.5){$q_t-q_{lt}-\qsat(T)$}
\rput(4.5,2.8){$q_p=q_t-q_{lt}-\qsat(T+\delta T)$}
\psline[linewidth=0.3pt]{->}(4.,2.6)(3.0,2.25)
%Delta T
\psline[linewidth=2.5pt](2.0,1.0)(4.0,2.0)
\psline[linewidth=2.5pt](4.0,2.0)(4.0,1.0)
\psline[linewidth=2.5pt](4.0,1.0)(7.5,1.0)
\psline[linestyle=dashed](2.0,2.0)(4.0,2.0)
\rput(1.30,1.9){$\frac{C_p(T_f-T)}{L_f}$}
\rput(3.8,0.8){$T_f-T$}
%Intersections
\pscircle[linewidth=0.3pt](3.74,1.87){0.1}
\rput(6,1.8){$q_t-q_{lt}-\qsat(T_f)$}
\psline[linewidth=0.3pt]{->}(5.,1.8)(4.1,1.8)
\end{pspicture}
%%
Comme la courbe de la deuxième équations (qui pourrait s'appeller la courbe de chauffage)
ne dépasse pas $$q_p=\frac{C_p(T_f-T)}{L_f}$$, valeur atteinte pour $$\delta T = T_f-T$$, on
voit qu'il ne peut y avoir de solution que si
$$q_t-q_{lt}-\qsat(T_f)\;\leq\;\frac{C_p(T_f-T)}{L_f}$$. Si cette inégalité n'est pas
vérifiée, alors la conversion éventuelle de toutes les précipitations en glace porterait
la température du nuage au-dessus de $$T_f$$, ce qui serait incompatible avec la conversion
des précipitations en glace.
Proposition: lorsque $$q_t-q_{lt}-\qsat(T_f)\;>\;\frac{C_p(T_f-T)}{L_f}$$ il ne faut
convertir en glace qu'une partie des précipitations, de façon que la température soit
amenée à $$T_f$$, le reste des précipitation restant sous forme de pluie. \\
%%
\psset{unit=0.1\linewidth}
\begin{pspicture}(8,3.7)
%axe
\psline{->}(2.,1.0)(7.8,1.0)
\rput(7.7,0.8){$\delta T$}
\psline{->}(2.,1.0)(2.,3.5)
\rput(1.8,3.4){$q_p$}
%qsat
\psline(2.0,3.0)(7.0,1.05)
\rput(1.0,3.0){$q_t-q_{lt}-\qsat(T)$}
%Delta T
\psline[linewidth=2.5pt](2.0,1.0)(4.0,2.0)
\psline[linewidth=2.5pt](4.0,2.0)(4.0,1.0)
\psline[linewidth=2.5pt](4.0,1.0)(7.5,1.0)
\psline[linestyle=dashed](2.0,2.0)(4.0,2.0)
\rput(1.30,1.9){$\frac{C_p(T_f-T)}{L_f}$}
\rput(3.8,0.8){$T_f-T$}
%Intersection
\psline(4.,2.)(4.,2.22)
\rput(6,2.22){$q_t-q_{lt}-\qsat(T_f)$}
\psline[linewidth=0.3pt]{->}(5.,2.22)(4.1,2.22)
\psline{<->}(4.1,1.)(4.1,2.)
\rput(4.5,1.5){glace}
\psline{<->}(3.9,2.)(3.9,2.22)
\rput(3.3,2.1){liquide}
\end{pspicture}
'''Récapitulation'''
Il apparaît sur cet exemple simplifié qu'il n'est pas toujours possible de transformer
en glace toutes les précipitations formées en-dessous de 0°C. Il faut considérer
les cas où les précipitations sont nécessairement mixtes.
Par rapport à la programation simpliste qui a été faite à ce jour dans Fisrtilp, il
reste deux améliorations à réaliser. D'abord, refaire le présent calcul formel en prenant
en compte le temps de relaxation de la conversion en précipitations. Ensuite, coder la
résolution itérative des équations donnant $$q_p$$ et $$\delta T$$.
[[Category:Physique]]
[[Category:Notes Techniques]]
40a4fa8f04b68c6725077a9bebf60ba664eddae2
Fichier:Lmdzpedia.png
6
9
13
2020-11-16T11:33:34Z
Lfairhead
1
wikitext
text/x-wiki
da39a3ee5e6b4b0d3255bfef95601890afd80709
Performance de FFTW
0
10
20
2021-01-22T17:37:49Z
Lfairhead
1
Page créée avec « Avec FFT le filtre "coûte" O(n*log(n)) opérations, sans fft le filtre "coûte" O(n*n) opérations, où n est le nombre de points en longitude. Donc l'utilisation de la F... »
wikitext
text/x-wiki
Avec FFT le filtre "coûte" O(n*log(n)) opérations, sans fft le filtre "coûte" O(n*n) opérations, où n est le nombre de points en longitude. Donc l'utilisation de la FFT doit être d'autant plus intéressante qu'on monte en résolution.
Ehouarn Millour a fait quelques test de son côté (en MPI seul), sur la machine Ada de l'IDRIS en 2013, en mode "newtonien" (donc avec dynamique seule). À "basse" résolution, l'avantage du filtre n'était pas encore très important :
* En 64x48x26 : (sur 16 procs), pour une année kronienne (année de la planète Saturne)
** sans FFT : 3.91h
** avec FFT : 3.77h
* En 128x128x26: (sur 32 procs), pour une année kronienne
** sans FFT : 19h
** avec FFT : 18h
* En 240x240x26: (64 procs), pour un quart d'année kronienne
** sans FFT : 14.5h
** avec FFT : 11h
12e2eb79ee2ce650ae1653467b968cc11e616c4e
Tiedke and iflag cldcon
0
12
22
2021-01-22T17:40:18Z
Lfairhead
1
Page créée avec « With Tiedke's convection scheme, iflag_cldcon=-2 gives a better representaion of low clouds radiative effect over the tropical oceans than iflag_cldcon=-1. »
wikitext
text/x-wiki
With Tiedke's convection scheme, iflag_cldcon=-2 gives a better representaion of low clouds radiative effect over the tropical oceans than iflag_cldcon=-1.
2f086f9bba84e065750652b4e442238bff26c837
LMDZ zoom collection
0
14
24
2021-01-22T17:44:10Z
Lfairhead
1
Page créée avec « == Livre de recettes pour utiliser le zoom à co-écrire par les utilisateurs == Le tableau google [https://docs.google.com/spreadsheets/d/1bjRQps-2b06oQIO6H73m9-6VE7rXr... »
wikitext
text/x-wiki
== Livre de recettes pour utiliser le zoom à co-écrire par les utilisateurs ==
Le tableau google [https://docs.google.com/spreadsheets/d/1bjRQps-2b06oQIO6H73m9-6VE7rXrH6OYAXPzQ4JCvo/edit#gid=0 "LMDZ_Zoom_collection"]
b5ce4bb46ce823167a53c89d9825d5fa2c7c149e
27
24
2021-01-22T21:01:09Z
Lfairhead
1
wikitext
text/x-wiki
== Livre de recettes pour utiliser le zoom à co-écrire par les utilisateurs ==
Le tableau google [https://docs.google.com/spreadsheets/d/1bjRQps-2b06oQIO6H73m9-6VE7rXrH6OYAXPzQ4JCvo/edit#gid=0 "LMDZ_Zoom_collection"]
[[Category:Zoom]]
64d72813ac853a02cb301af0661b829848e705c4
28
27
2021-01-22T21:01:40Z
Lfairhead
1
wikitext
text/x-wiki
== Livre de recettes pour utiliser le zoom à co-écrire par les utilisateurs ==
Le tableau google [https://docs.google.com/spreadsheets/d/1bjRQps-2b06oQIO6H73m9-6VE7rXrH6OYAXPzQ4JCvo/edit#gid=0 "LMDZ_Zoom_collection"]
[[Catégorie:Zoom]]
2dd0bae5928f4465eeebc0f408218caeb9dd3d61
Catégorie:Zoom
14
15
26
2021-01-22T21:00:19Z
Lfairhead
1
Page créée avec « Informations concernant le zoom »
wikitext
text/x-wiki
Informations concernant le zoom
20052b01657abe705b838a16d0dceae69e3c023a
Catégorie:Dynamique
14
16
30
2021-01-22T21:03:37Z
Lfairhead
1
Page créée avec « Les informations de LMDZPedia concernant la dynamique »
wikitext
text/x-wiki
Les informations de LMDZPedia concernant la dynamique
c61e8383f0e46cab3109a59ab5d0ff6167debbb0
Catégorie:Physique
14
17
34
2021-01-22T21:13:48Z
Lfairhead
1
Page créée avec « Informations concernant la physique LMDZ »
wikitext
text/x-wiki
Informations concernant la physique LMDZ
fdab835745d7efcfbc7e4910d9987f4ce1a42fe4
Catégorie:HowTo
14
18
35
2021-01-22T21:14:13Z
Lfairhead
1
Page créée avec « Les How-Tos »
wikitext
text/x-wiki
Les How-Tos
31ad2cf0ad11d4591a13dcc100b252ca5c7bf300
48
35
2021-01-23T17:55:57Z
Lfairhead
1
wikitext
text/x-wiki
Les How-Tos
[[Category:FAQ]]
582e23827254610fd15b30350f4d19dbe11846f0
Catégorie:Guidage
14
19
38
2021-01-22T21:16:54Z
Lfairhead
1
Page créée avec « Informations sur le guidage »
wikitext
text/x-wiki
Informations sur le guidage
6f829dff8c760f39a2673478273bb554a11c603f
Catégorie:Notes Techniques
14
21
45
2021-01-22T22:26:15Z
Lfairhead
1
Page créée avec « Index des notes techniques »
wikitext
text/x-wiki
Index des notes techniques
5e5a4f99b0a42fa2a8c6a9aabe5b54f273f46546
Pmagic
0
22
46
2021-01-23T17:54:17Z
Lfairhead
1
Page créée avec « À n’activer qu’en simulation couplée d’équilibre present-day. En pré-industriel, on a un forcage anthropique nul (par définition). On a un bilan net pré-ind... »
wikitext
text/x-wiki
À n’activer qu’en simulation couplée d’équilibre present-day.
En pré-industriel, on a un forcage anthropique nul (par définition). On a un bilan net pré-industriel au sommet Bpi = 0 W / m2 Et une température globale d’équilibre Tpi.
En actuel, sur une décennie à fixer, on a un forçage donné. Disons F=1 W/m2. Supposons que la sensibilité à l’équilibre de l’atmosphère soit de 1 K / W / m2. Alors, à l’équilibre pour ce forçage, c’est-à-dire au bout de quelques décennies avec le même forçage, on atteindra Teq = Tpi + 1 avec Beq = 0 W / m2.
Mais, parce qu’on est en transitoire, la température globale est toujours en retard sur la température d’équilibre. Ce retard est associé à un flux dit "ocean heat uptake" vers l’océan d’environ 0.5 W / m2. L’atmosphère, elle, ne stocke pas d’énergie (elle est trop fine). Donc elle a toujours le même flux net global en bas et en haut. Donc, en période de réchauffement comme en ce moment, on a un flux net non nul de Beq = 0.5 W / m2 en surface et au sommet de l’atmosphère (à savoir que ce flux net est bien en dessous des barres d’erreur des reconstitutions de bilan radiatif à partir des observations).
Si le modèle était parfait, si on le forçait par les SST observées avec le forçage des mêmes décennies, on retrouverait ce 0.5 W / m2 en surface sur l’océan (parce que l’atmosphère s’attend à voir un océan à l’équilibre plus chaud qu’il ne l’est) et au sommet de l’atmosphère. Là, pas besoin de faire quoi que ce soit. L’atmosphère voit effectivement des SST plus froides que celles qui seraient atteintes à l’équilibre avec le même forçage.
En couplé, si on veut avoir un present day réaliste (comme observé dans le monde réel transitoire) dans une simulation d’équilibre, il faut faire quelque chose pour refroidir l’océan (par rapport à son équilibre futur plus chaud). Le flux qu’il faut pour ca est justement ce ocean heat uptake. Une façon simple de faire ça, c’est du moins ce dont on s’était convaincus avec Jean-Louis, est de booster l’albédo de surface sur océan.
Quand on revient au pré-industriel, ou dans les runs transitoires (historical), il faut évidemment enlever ce terme.
Remarque pour finir : si le modèle était parfait, il faudrait donc qu’on vise un Beq = 0.5 W / m2 quand on fait le tuning. En fait, le modèle n’est pas assez parfait pour ça. Les structures bougent quand on passe du forcé au couplé. Et, du coup, il se peut qu’il faille un Beq de +/- 2 W / m2 (d’expérience) pour avoir un couplé équilibré. Mais ca n’empêche pas qu’il faut mettre le pmagic si on veut viser une certaine température globale en actuel. Ce sont deux questions différentes.
pmagic a quand même un effet en forcé. Très faible car l'albedo de surface sur océan (affecté par pmagic) n'a qu'un effet très faible sur le taux de chauffage solaire dans l'atmosphère.
[[Category:paramètres]]
3e7a5cf13bed6b29e9b1993acc5de0e2481a1ec0
Catégorie:Paramètres
14
23
47
2021-01-23T17:54:36Z
Lfairhead
1
Page créée avec « Explication des paramètres »
wikitext
text/x-wiki
Explication des paramètres
b86146f382e53a816ff9c717599221f3ad06714c
Catégorie:FAQ
14
24
49
2021-01-23T17:56:17Z
Lfairhead
1
Page créée avec « Foire aux questions »
wikitext
text/x-wiki
Foire aux questions
660ae95af575af268f3067022d58d52885727b17
HowTo: Run at different horizontal resolutions
0
25
50
2021-01-23T18:10:02Z
Lfairhead
1
Page créée avec « == What one needs to know to be able to run at a different model resolution == This page contains some information and tips to help you setup a successful run at a differ... »
wikitext
text/x-wiki
== What one needs to know to be able to run at a different model resolution ==
This page contains some information and tips to help you setup a successful run at a different (horizontal) resolution
# You will need input and forcing files at the sought resolution
# You will need to adapt the (dynamics) time step <br />As explained in the LMDZ Tutorial courses "dynamics: ..." (e.g. here) there is a simple rule of thumb to know to what extent you need to change the "day_step" (number of dynamical steps per day):<br />day_step(max(iim,jjm)=N) ~ day_step(max(iim,jjm)=M) * N/M<br />Check what the reference values (in the gcm.def.* files in the LMDZ/Deflist directory) are for a given N are to evaluate what is needed for M<br />Example: currently, in gcm.def_144x142 i.e. for iim=144,jjm=142 , day_step=672 so to run at twice that resolution you should halve the time steps and thus use day_step=1944 (and adapt iphysiq accordingly, i.e. double it here)
#You might need to change the dissipation constants<br />This is more tricky and less linear than for the time steps; in practice some trial and error will be needed but overall you will need to increase dissipation (i.e. lower le teta* constants)
# At present, physics need to be run at a timestep of 15 minutes so you need to adjust iphysiq according to the formula<br />iphysiq = 900 * day_step / 86400
As guidelines, and starting values, you could use or extrapolate from those given in the table below:
{|class="wikitable"
! Resolution
! day_step
! tetagdiv
! tetagrot
! tetatemp
! iphysiq
|-
|96 x 95 (CMIP5) || 480 ( = 180 s) || 5400. || 5400. || 5400. || 5 ( = 15 min)
|-
|144 x 142 (CMIP6) || 672 ( ~ 128 s) || 3600. || 21600. || 10800. || 7 ( = 15 min)
|-
|256 x 256 (QUEST) || 1344 (~ 64 s) || 1200. || 7800. || 3800. || 14 ( = 15 min)
|}
If you have values for other resolutions that work well for you, don't hesitate to contact us so that we can include them in the table
9aae05b36c6aa4791a8ddfd72c8a4cebde210430
51
50
2021-01-23T18:10:37Z
Lfairhead
1
wikitext
text/x-wiki
== What one needs to know to be able to run at a different model resolution ==
This page contains some information and tips to help you setup a successful run at a different (horizontal) resolution
# You will need input and forcing files at the sought resolution
# You will need to adapt the (dynamics) time step <br />As explained in the LMDZ Tutorial courses "dynamics: ..." (e.g. here) there is a simple rule of thumb to know to what extent you need to change the "day_step" (number of dynamical steps per day):<br />day_step(max(iim,jjm)=N) ~ day_step(max(iim,jjm)=M) * N/M<br />Check what the reference values (in the gcm.def.* files in the LMDZ/Deflist directory) are for a given N are to evaluate what is needed for M<br />Example: currently, in gcm.def_144x142 i.e. for iim=144,jjm=142 , day_step=672 so to run at twice that resolution you should halve the time steps and thus use day_step=1944 (and adapt iphysiq accordingly, i.e. double it here)
#You might need to change the dissipation constants<br />This is more tricky and less linear than for the time steps; in practice some trial and error will be needed but overall you will need to increase dissipation (i.e. lower le teta* constants)
# At present, physics need to be run at a timestep of 15 minutes so you need to adjust iphysiq according to the formula<br />iphysiq = 900 * day_step / 86400
As guidelines, and starting values, you could use or extrapolate from those given in the table below:
{|class="wikitable"
! Resolution
! day_step
! tetagdiv
! tetagrot
! tetatemp
! iphysiq
|-
|96 x 95 (CMIP5) || 480 ( = 180 s) || 5400. || 5400. || 5400. || 5 ( = 15 min)
|-
|144 x 142 (CMIP6) || 672 ( ~ 128 s) || 3600. || 21600. || 10800. || 7 ( = 15 min)
|-
|256 x 256 (QUEST) || 1344 (~ 64 s) || 1200. || 7800. || 3800. || 14 ( = 15 min)
|}
If you have values for other resolutions that work well for you, don't hesitate to contact us so that we can include them in the table
[[Category:HowTo]]
5ff48883d2cb7723d7e911c3b549876640c78b40
WhatIs: The run.def input file
0
26
52
2021-01-23T18:49:14Z
Lfairhead
1
Page créée avec « == About the run.def input file, its format and included def files == The run.def file is a text file that is read at run time by LMDZ (and must thus be present in the sa... »
wikitext
text/x-wiki
== About the run.def input file, its format and included def files ==
The run.def file is a text file that is read at run time by LMDZ (and must thus be present in the same directory as the executable).
It contains the values of various parameters that the user can specify (as "key = value", where "key" is a predefined keyword and "value" may be a real, an integer, a string or a logical) and modify depending on the specific simulation that is intended, e.g. the line:
nday = 30
means that when the GCM will run, it will set parameter nday (the number of days to run) to 30.
Any line starting with # is a comment, e.g.
# nday : length of the simulation (in days)
The order in which parameters are given in the run.def file is not important, except if a parameter value is given more than once (not recommended!), then it is the last occurrence that prevails.
The run.def file can include other files (based on the same format, lines containing "key = value" or comments) using the INCLUDEDEF keyword, e.g.:
INCLUDEDEF=gcm.def
In practice, because there are many parameters that one can set/change, it is good practice to separate related sets of parameters in separate files.
Reference *.def files are provided in the LMDZ/DefLists directory
12/05/2020
[[Category:WhatIs]]
[[Category:inputs]]
d39faf3ed2f31e34b0e783a7d117228ab12c43d7
Catégorie:WhatIs
14
27
53
2021-01-23T18:49:44Z
Lfairhead
1
Page créée avec « What is ...? [[Category:FAQ]] »
wikitext
text/x-wiki
What is ...?
[[Category:FAQ]]
863b6b63fdc875c2b8c21161035f3564c27209b5
WhatIs: The start.nc and startphy.nc input files
0
28
54
2021-01-23T18:51:55Z
Lfairhead
1
Page créée avec « == LMDZ initial condition files == To run, LMDZ requires initial conditions (i.e. values of state variables at a given instant). These are provided as two NetCDF files, s... »
wikitext
text/x-wiki
== LMDZ initial condition files ==
To run, LMDZ requires initial conditions (i.e. values of state variables at a given instant). These are provided as two NetCDF files, start.nc (which contains state variables for the dynamics) and startphy.nc (state variables for the physics). As these files contain information about fields at given grid points, they must be '''at the same resolution''' as LMDZ; in other words, the GCM does not do any interpolation of initial conditions which must thus be provided on the exact same grid that the model uses.
[[Category::WhatIs]]
[[Category::inputs]]
731793b67ab3ce17a6a2c6f7994c3308c5cc450e
55
54
2021-01-23T18:52:09Z
Lfairhead
1
wikitext
text/x-wiki
== LMDZ initial condition files ==
To run, LMDZ requires initial conditions (i.e. values of state variables at a given instant). These are provided as two NetCDF files, start.nc (which contains state variables for the dynamics) and startphy.nc (state variables for the physics). As these files contain information about fields at given grid points, they must be '''at the same resolution''' as LMDZ; in other words, the GCM does not do any interpolation of initial conditions which must thus be provided on the exact same grid that the model uses.
[[Category:WhatIs]]
[[Category:inputs]]
bb41e1e4fd81b9aea07174df945546a4254221a2
WhatIs: The makelmdz fcm script
0
29
56
2021-01-23T18:55:24Z
Lfairhead
1
Page créée avec « == The makelmdz_fcm script to compile LMDZ == The makelmdz_fcm script is the bash script that you use to compile LMDZ. This is where one sets various options (e.g which p... »
wikitext
text/x-wiki
== The makelmdz_fcm script to compile LMDZ ==
The makelmdz_fcm script is the bash script that you use to compile LMDZ. This is where one sets various options (e.g which physics package to compile the model with, what grid resolution to use, etc.).
To list available options, run "makelmdz_fcm -h", which should return something like:
Usage :
makelmdz_fcm [options] -arch nom_arch exec
[-h] : brief help
[-d [[IMx]JMx]LM] : IM, JM, LM are the dimensions in x, y, z (default: 96x72x19)
[-p PHYS] : set of physical parametrizations (in libf/phyPHYS), (default: lmd)
[-prod / -dev / -debug] : compilation mode production (default) / developement / debug
[-c false/MPI1/OMCT] : coupling with ocean model : MPI1/OMCT/false (default: false)
[-v false/orchidee2.0/orchidee1.9/true] : version of the vegetation model to include (default: false)
false : no vegetation model
orchidee2.1 : compile using ORCHIDEE 2.1 (or more recent version)
orchidee2.0 : compile using ORCHIDEE 2.0
orchidee1.9 : compile using ORCHIDEE up to the version including OpenMP in ORCHIDEE : tag 1.9-1.9.5(version AR5)-1.9.6
true : (obsolete; for backward compatibility) use ORCHIDEE tag 1.9-1.9.6
[-chimie INCA/false] : with INCA chemistry model or without (default: false)
[-cosp true/false] : compile with/without cosp package (default: false)
[-cosp2 true/false] : compile with/without cosp2 package (default: false)
[-cospv2 true/false] : compile with/without cospv2 package (default: false)
[-sisvat true/false] : compile with/without sisvat package (default: false)
[-rrtm true/false] : compile with/without rrtm package (default: false)
[-dust true/false] : compile with/without the dust package by Boucher and co (default: false)
[-strataer true/false] : compile with/without the strat aer package by Boucher and co (default: false)
[-parallel none/mpi/omp/mpi_omp] : parallelism (default: none) : mpi, openmp or mixted mpi_openmp
[-g GRI] : grid configuration in dyn3d/GRI_xy.h (default: reg, inclues a zoom)
[-io ioipsl/mix/xios] : Input/Output library (default: ioipsl)
[-include INCLUDES] : extra include path to add
[-cpp CPP_KEY] : additional preprocessing definitions
[-adjnt] : adjoint model, not operational ...
[-mem] : reduced memory dynamics (if in parallel mode)
[-filtre NOMFILTRE] : use filtre from libf/NOMFILTRE (default: filtrez)
[-link LINKS] : additional links with other libraries
[-j n] : active parallel compiling on ntask
[-full] : full recompiling
[-libphy] : only compile physics package (no dynamics or main program)
[-fcm_path path] : path to the fcm tool (default: tools/fcm/bin)
[-ext_src path] : path to an additional set of routines to compile with the model
[-arch_path path] : path to architecture files (default: arch)
-arch nom_arch : target architecture
exec : executable to build
The user must at the very least provide the name of the executable (typically "gcm") and the mandatory option "-arch" with the target architecture name (e.g. "local" or "gfortran_CICLAD").
As LMDZ works on a fixed grid (set when compiling), option "-d" is also almost always used to specify the number of grid points iimxjjmxlllm (where iim is the number of points along longitude, jjm is the number of points along latitude and llm the number of atmospheric layers).
13/05/2020
[[Category:WhatIs]]
2388b899210929a3968d1a1c830cd0a73955cbb0
WhatIs: The target architecture ("arch") files
0
30
57
2021-01-23T18:59:51Z
Lfairhead
1
Page créée avec « == A brief description of the architecture files used by the makelmdz_fcm script == The target architecture files are files used by the makelmdz_fcm compilation script. T... »
wikitext
text/x-wiki
== A brief description of the architecture files used by the makelmdz_fcm script ==
The target architecture files are files used by the makelmdz_fcm compilation script. These files contain all the necessary information about the local environment, where libraries are located, which compiler, and compiler options will be used, etc.
In practice, when the makelmdz_fcm is run with "-arch somename", it will look for files "arch-somename.env", "arch-somename.path" and "arch-somename.fcm" (obviously "somename" can be any string, makelmdz_fcm will adapt the arch file names it seeks) in the LMDZ/arch subdirectory. and link these as "arch.env", "arch.path" and "arch.env" in the LMDZ directory. Re-running makelmdz_fcm with a different argument to the "-arch" option will update these links.
'''The arch.env file'''
This file is optional. It should contain instructions and declarations related to the environment (e.g. setting up environment variables, or loading modules), necessary prerequisites to compiling LMDZ. For example the "arch/arch-gfortran_CICLAD.env" file that contains:
module unload openmpi
module load openmpi/1.4.5-gfortran
module unload netcdf4
module load netcdf4/4.2.1.1-gfortran
export NETCDF_HOME=/opt/netcdf42/gfortran
imposes first running some "module" commands and setting the environment variable "NETCDF_HOME" prior to the compilation.
'''The arch.path file'''
This file contains information about the paths (relative to the LMDZ directory) and options concerning libraries (NetCDF, IOIPSL, etc.) required to compile LMDZ. For example the "arch/arch-gfortran_CICLAD.path" contains:
NETCDF_LIBDIR="-L${NETCDF_HOME}/lib -lnetcdf -lnetcdff"
NETCDF_INCDIR=-I${NETCDF_HOME}/include
IOIPSL_INCDIR=$LMDGCM/../../lib
IOIPSL_LIBDIR=$LMDGCM/../../lib
ORCH_INCDIR=$LMDGCM/../../lib
ORCH_LIBDIR=$LMDGCM/../../lib
OASIS_INCDIR=$LMDGCM/../../prism/SX/build/lib/psmile.$couple
OASIS_LIBDIR=$LMDGCM/../../prism/SX/lib
INCA_LIBDIR=$LMDGCM/../INCA/config/lib
INCA_INCDIR=$LMDGCM/../INCA/config/lib
XIOS_INCDIR=$LMDGCM/../XIOS/inc
XIOS_LIBDIR=$LMDGCM/../XIOS/lib
Here the keywords are quite self-explanatory, for each external library, NetCDF, IOIPSL, XIOS, ... one provide the compiling intructions about related "include" directories along with the path to the libraries.
'''The arch.fcm file'''
This file contains information about the compiler to use and compiler options to set. Each line starts with a reserved keyword, followed by the appropriate specifications. For example the "arch/arch-gfortran_CICLAD.fcm" file contains:
%COMPILER $MPI_BIN/mpif90
%LINK $MPI_BIN/mpif90
%AR ar
%ARFLAGS rs
%MAKE gmake
%FPP_FLAGS -P -traditional
%FPP_DEF NC_DOUBLE
%BASE_FFLAGS -c -fdefault-real-8 -fcray-pointer -frecursive -ffree-line-length-0 -fno-align-commons
%PROD_FFLAGS -O3
%DEV_FFLAGS -O -Wall -fbounds-check
%DEBUG_FFLAGS -ffpe-trap=invalid,zero,overflow -Wall -fbounds-check -g3 -O0 -fstack-protector-all -fbacktrace
%MPI_FFLAGS
%OMP_FFLAGS -fopenmp
%BASE_LD -Wl,-rpath=$NETCDF_HOME/lib
%MPI_LD
%OMP_LD -fopenmp
Implying that the compiler to use is "mpif90", located in "$MPI_BIN/mpif90" (here $MPI_BIN is an environment variable that has been set via the "module load openmpi/1.4.5-gfortran" command from the corresponding arch-gfortran_CICLAD.env file), that compilation will always include the "-c -fdefault-real-8 -fcray-pointer -frecursive ffree-line-length-0 -fno-align-commons" options, etc.
The meaning of the various keywords in the arch.fcm file are:
* %COMPILER: The compiler to use
* %LINK: The linker to use (usually this is the same as the compiler)
* %AR: the archiving tool (to collect objects and build the library, typically "ar")
* %ARFLAGS: options to give to the archiving tool
* %FPP_FLAGS: options to pass to the preprocessor of the Fortan source code
* %FPP_DEF: preprocessing flags to set
* %BASE_FFLAGS: compilation flags to alway include when compiling the source code
* %PROD_FFLAGS: compilation flags to include if makelmdz_fcm is run with the "-prod" option
* %DEV_FFLAGS: compilation flags to include if makelmdz_fcm is run with the "-dev" option
* %DEBUG_FFLAGS: compilation flags to include if makelmdz_fcm is run with the "-debug" option
* %MPI_FFLAGS: compilation flags to include if makelmdz_fcm is run with the "-parallel mpi" or "-parallel mpi_omp" options (i.e. to have a code that can run in MPI)
* %OMP_FFLAGS: compilation flags to include if makelmdz_fcm is run with the "-parallel omp" or "-parallel mpi_omp" options (i.e. to have a code that can run in OpenMP)
* %BASE_LD: flags to add when running the linker
* %MPI_LD: flags to add when running the linker when MPI is enabled
* %OMP_LD: flags to add when running the linker when OpenMP is enabled
13/05/2020
[[Category:WhatIs]]
efb5239b24a1d3d5050de03c19f29d9efe77f754
WhatIs: The traceur.def input file
0
31
58
2021-01-23T19:37:22Z
Lfairhead
1
Page créée avec « == The traceur.def input file tells LMDZ about the tracers to advect == The traceur.def is a plain text file that is read at run time by LMDZ. Its format is quite strict:... »
wikitext
text/x-wiki
== The traceur.def input file tells LMDZ about the tracers to advect ==
The traceur.def is a plain text file that is read at run time by LMDZ. Its format is quite strict:
* The first line contains the number n of tracers to advect in the dynamics
* The n following lines contain the following set ( two integer numbers and a string): hadv , vadv, tname . hadv and vadv are traceur advection scheme numbers and tname is the tracer name
'''Tracer advection schemes'''
A few are coded, but not for the parallel case, so we only present the important (i.e. operational) ones here:
* 0 : no advection. This tracer will not be advected by the dynamics
* 10: advection using a Van Leer scheme. This is the standard advection scheme to use for tracers.
* 14: a specific advection scheme for the water vapor tracer (i.e. "H2Ov")
'''Illustrative example'''
In practice a "traceur.def" file will look like this:
4
14 14 H2Ov
10 10 H2Ol
10 10 H2Oi
00 00 Aga
In this example, there are 4 tracers, the first one is "H2Ov" (water vapor) and advected using scheme number 14, the second and third are "H2Ol" (liquid water) and "H2Oi" (water ice), and the last is called "Aga" and completely passive (i.e. untouched by the dynamics).
13/05/2020
[[Category:WhatIs]]
bae6819a45ce302a640cd29a0a91f29732ed0d43
Time marching in LMDZ
0
32
59
2021-01-23T22:29:50Z
Lfairhead
1
Page créée avec « == Some information about LMDZ time steps (and related input parameters) and time marching scheme == === Overview === LMDZ is a time marching code, which simply means th... »
wikitext
text/x-wiki
== Some information about LMDZ time steps (and related input parameters) and time marching scheme ==
=== Overview ===
LMDZ is a time marching code, which simply means that the evolution equations of the climate system are solved along time, starting from a given initial condition (which is why the GCM typically requires input files start.nc and startphy.nc to run).
In a nutshell: one must distinguish between the time steps for the dynamics and for the physics as the underlying processes (and related numerical constraints) are quite different. In practice the atmospheric motions computed in the dynamics require short time steps (of the order of minutes) whereas (most) processes in the physics can be handled with time steps of a fraction of an hour.
The main parameters (typically set in file gcm.def) that set the time steps in the model are the following:
* day_step : the number of dynamical time steps per day (must be an integer). Note that this parameter conversely sets the dynamics time step (in s) to dt_dyn=86400/day_step
* iphysiq : the rate (in dynamical time steps) at which the dynamics will call the physics, must be an integer (and should be a divisor of day_step so that the physics are called an integer number of times per day). This parameter conversely sets the physics time step (in s) to dt_phys=iphysiq*dt_dyn=86400*(iphysiq/day_step)
=== Good to know ===
There is no reason or need to change the physics time step when changing the (horizontal) grid, but there are strong stability constraints for the dynamics which requires using a smaller dynamical time step with finer grids. To decrease dt_dyn one must thus increase day_step, bearing in mind the following constraints:
* The time marching scheme in the dynamics is of mixed Leapfrog-Matsuno type (if the parameter "purmats" is set to false in gcm.def, which is the default behavior) . This means that a number of leapfrog steps are done between single Matsuno steps; this number is set by the "iperiod" parameter (also in gcm.def). Stability constraints (loosely put, the Matsuno step recombines solutions diverging away from each other between even and odd leapfrog steps) require keeping iperiod to 10 or less (typically 5 or 7).
* It is mandatory that iperiod be a divisor of iphysiq so that the physics package is called over integer cycles of Leapfrog-Matsuno integration.
=== An illustrative example ===
As can bee see in the example file (gcm.def_144x142 in the LMDZ DefLists directory, also check [[HowTo:_Run_at_different_horizontal_resolutions|this related HowTo]]): for a 144x142 regular horizontal grid, we set "day_step=672", "iperiod=7" and "iphysiq=7", which implies a dynamical time step dt_dyn=86400./672=128.6 s (i.e. 2.15 minutes) and a physical time step of 86400.*7./672=900 s (i.e. 15 minutes). For an even higher resolution, e.g. 256 x 256 a smaller dynamical step is required and we set "day_step=1344" (i.e. dt_dyn=64.3s), while keeping "iperiod=7" and increasing iphysiq to 14 (i.e. dt_phy=900 s).
13/05/2020
7cdfc6589b43d56af9269f933a48859384c12931
WhatIs: The Bands *.dat file
0
33
60
2021-01-23T22:31:59Z
Lfairhead
1
Page créée avec « == What is the Bands_*.dat file produced by LMDZ at run-time == When it is run in parallel (using MPI), LMDZ looks for a file in the current directory that is called "Ban... »
wikitext
text/x-wiki
== What is the Bands_*.dat file produced by LMDZ at run-time ==
When it is run in parallel (using MPI), LMDZ looks for a file in the current directory that is called "Bands_IIMxJJMxLLMxN.dat", where IIM,JJM,LLM are the model's horizontal and vertical resolution (same as when compiling) and N is the number of MPI processes to use.
If there is no "Bands_IIMxJJMxLLMxN.dat", then a default one is created at run-time.
Content of the "Bands_IIMxJJMxLLMxN.dat" file:
It consists of 4 sections of 2 columns each: the first column contains the MPI process number and the second the number of latitude bands (or columns, for section 4) that are assigned to it. The first section is relative to computations in the dynamics, the second to tracer advection (in the dynamics), the third to dissipation (also in the dynamics) and the fourth to physics.
[[Category:WhatIs]]
391a54434914da3733a8b2448081f81ae749ca41
Fichier:Image chaleur sensible.png
6
34
61
2021-01-23T22:42:22Z
Lfairhead
1
les variables concernées par la chaleur sensible dans LMDZ
wikitext
text/x-wiki
les variables concernées par la chaleur sensible dans LMDZ
105245fec52ac77f342aa0d81d6606247f87b61e
Variables chaleur sensible
0
35
62
2021-01-23T22:50:03Z
Lfairhead
1
Page créée avec « [[File:Image chaleur sensible.png|Légende : vert pour les modules, rouge pour les fichiers, noir pour les procédures, bleu pour les variables locales et arguments.]] »
wikitext
text/x-wiki
[[File:Image chaleur sensible.png|Légende : vert pour les modules, rouge pour les fichiers, noir pour les procédures, bleu pour les variables locales et arguments.]]
68a44346121f09349aa61d22a61d7d7b5147a146
63
62
2021-01-23T22:50:50Z
Lfairhead
1
wikitext
text/x-wiki
[[File:Image chaleur sensible.png||Légende : vert pour les modules, rouge pour les fichiers, noir pour les procédures, bleu pour les variables locales et arguments.]]
0a75b85bf10a0aa7c3b99e7d555accd2df8657d3
65
63
2021-01-23T23:04:00Z
Lfairhead
1
wikitext
text/x-wiki
[[File:Image chaleur sensible.png||]]
Légende : vert pour les modules, rouge pour les fichiers, noir pour les procédures, bleu pour les variables locales et arguments. Cf. [[Diagramme de flot de données|légende plus détaillée]]. Fichier source LibreOffice pour le graphique.
Ce diagramme correspond au cas où iflag_split >= 1 et ok_flux_surf est faux.
x : hors des poches froides, w : dans les poches froides.
e2d290742c3f3c51575e510fd859ce4a5799a328
66
65
2021-01-23T23:04:45Z
Lfairhead
1
wikitext
text/x-wiki
[[File:Image chaleur sensible.png||]]
Légende : vert pour les modules, rouge pour les fichiers, noir pour les procédures, bleu pour les variables locales et arguments. Cf. [[Diagramme de flot de données|légende plus détaillée]]. Fichier source LibreOffice pour le graphique.
Ce diagramme correspond au cas où iflag_split >= 1 et ok_flux_surf est faux.
x : hors des poches froides, w : dans les poches froides.
[[Category:physique]]
467a6cbc698657de66d10c494723b102f2ed0dea
Diagramme de flot de données
0
36
64
2021-01-23T23:03:25Z
Lfairhead
1
Page créée avec « Rectangles. Un rectangle pour un contenant : procédure, module ou fichier. La couleur verte pour les modules, la couleur noire pour les procédures, la couleur rouge po... »
wikitext
text/x-wiki
Rectangles. Un rectangle pour un contenant : procédure, module ou fichier. La couleur verte pour les modules, la couleur noire pour les procédures, la couleur rouge pour les fichiers. Une procédure est représentée par l'empilement de deux rectangles : le rectangle supérieur est l'interface de la procédure, le rectangle inférieur contient les données locales.
Texte. Une variable de module est en vert au niveau du module. Une variable de module utilisée ou définie dans une procédure, et donc visible dans cette procédure par utilisation (use association) ou descente (host association) est récrite au niveau de cette procédure en bleu. Les variables locales et les arguments des procédures sont aussi en bleu. Les variables des fichiers NetCDF sont en rouge. Si la procédure est une fonction alors le nom de la procédure est en bleu.
Connecteurs. Une ligne rouge désigne une lecture ou une écriture dans un fichier, une ligne bleue une affectation ou une association d'arguments. Une ligne verte désigne une association par utilisation ou descente. Une flèche à l'une ou l'autre extrémité d'une ligne indique le sens du transfert de la donnée (le transfert peut se faire dans les deux sens).
[[Category:Hidden]]
5fce01d9c443e054090d84af786bb97d1b56b5df
Fichier:Profil eau nuageuse.png
6
38
68
2021-01-23T23:15:54Z
Lfairhead
1
Profil eau nuageuse
wikitext
text/x-wiki
Profil eau nuageuse
be3daea6ccc3c8a68d5437b989738a17c125c8f8
Eau nuageuse
0
39
69
2021-01-23T23:16:34Z
Lfairhead
1
Page créée avec « L'eau nuageuse que voit le rayonnement n'est pas la même que l'eau nuageuse utilisée dans la physique et la dynamique. Lors de la conversion en précipitation dans fisrt... »
wikitext
text/x-wiki
L'eau nuageuse que voit le rayonnement n'est pas la même que l'eau nuageuse utilisée dans la physique et la dynamique. Lors de la conversion en précipitation dans fisrtilp, c'est une moyenne de l'eau restante dans le nuage PENDANT la précipitation qui est stockée dans radliq pour le rayonnement, et non l'eau restante À LA FIN du pas de temps, qui elle est utilisée dans la physique et advectée par la dynamique. (C'est un choix qui peut être discuté.) Du coup, il est facile de se perdre et de voir des incohérences dans les sorties entre l'eau qui sort du rayonnement et celle qui sort de la physique.
Pour résumer, sont écrites ci-dessous les variables qui sont égales avec entre parenthèses le nom de la routine correspondante ou "netcdf" quand il s'agit des sorties :
Rayonnement :
xflwc(newmicro) + xfiwc(newmicro) = cldliq(physiq) = radliq(fisrt) = lwcon(netcdf) + iwcon(netcdf)
Physique / dynamique :
ql_seri(physiq) + qs_seri(physiq) = ocond(netcdf)
Attention cependant :
radliq(fisrt) /= ocond(netcdf)
autrement dit :
lwcon(netcdf) + iwcon(netcdf) /= ocond(netcdf)
(ce qui n'est pas du tout évident)
Si on enlève la moyenne faite par fisrtilp lors de la conversion en précipitation, on obtient bien l'égalité entre l'ensemble des variables. Ci-dessous un exemple de profils des différentes variables. Cette moyenne tend à augmenter l'eau nuageuse transmise au rayonnement. Comme il s'agit d'une moyenne sur le pas de temps plutôt qu'une eau restante à la fin du pas de temps, elle tend donc, a priori, à faire des nuages plus brillants. Cette moyenne remonte à Le Treut et Li (1991), où le pas de temps physique du modèle était d'une demi-heure contre 15 min actuellement.
[[File:Profil_eau_nuageuse.png|Profile eau nuageuse]]
[[Category::physique]]
070fd38801e9e2b8073ed61d65adf9dd5f71e69c
70
69
2021-01-23T23:16:50Z
Lfairhead
1
wikitext
text/x-wiki
L'eau nuageuse que voit le rayonnement n'est pas la même que l'eau nuageuse utilisée dans la physique et la dynamique. Lors de la conversion en précipitation dans fisrtilp, c'est une moyenne de l'eau restante dans le nuage PENDANT la précipitation qui est stockée dans radliq pour le rayonnement, et non l'eau restante À LA FIN du pas de temps, qui elle est utilisée dans la physique et advectée par la dynamique. (C'est un choix qui peut être discuté.) Du coup, il est facile de se perdre et de voir des incohérences dans les sorties entre l'eau qui sort du rayonnement et celle qui sort de la physique.
Pour résumer, sont écrites ci-dessous les variables qui sont égales avec entre parenthèses le nom de la routine correspondante ou "netcdf" quand il s'agit des sorties :
Rayonnement :
xflwc(newmicro) + xfiwc(newmicro) = cldliq(physiq) = radliq(fisrt) = lwcon(netcdf) + iwcon(netcdf)
Physique / dynamique :
ql_seri(physiq) + qs_seri(physiq) = ocond(netcdf)
Attention cependant :
radliq(fisrt) /= ocond(netcdf)
autrement dit :
lwcon(netcdf) + iwcon(netcdf) /= ocond(netcdf)
(ce qui n'est pas du tout évident)
Si on enlève la moyenne faite par fisrtilp lors de la conversion en précipitation, on obtient bien l'égalité entre l'ensemble des variables. Ci-dessous un exemple de profils des différentes variables. Cette moyenne tend à augmenter l'eau nuageuse transmise au rayonnement. Comme il s'agit d'une moyenne sur le pas de temps plutôt qu'une eau restante à la fin du pas de temps, elle tend donc, a priori, à faire des nuages plus brillants. Cette moyenne remonte à Le Treut et Li (1991), où le pas de temps physique du modèle était d'une demi-heure contre 15 min actuellement.
[[File:Profil_eau_nuageuse.png|Profile eau nuageuse]]
[[Category:physique]]
2d52b491fb60ae071d5495d5ace15937e84389e9
XIOS : "something must be wrong with mask index"
0
40
71
2021-01-23T23:21:18Z
Lfairhead
1
Page créée avec « Dans une simulation avec XIOS et LMDZ, XIOS affiche les messages suivants : info : If domain dom_out does not have overlapped regions between processes something must... »
wikitext
text/x-wiki
Dans une simulation avec XIOS et LMDZ, XIOS affiche les messages suivants :
info : If domain dom_out does not have overlapped regions between processes something must be wrong with mask index
Vous pouvez ignorer ce message. Dans le cas de LMDZ, on a bien de "l'overlap" entre les domaines de sortie, donc pas de soucis. C'est une mise en garde plus pour les développeurs. Si effectivement on n'a pas de recouvrement entre les domaines, ce message peut être le signe d'un problème lors du calcul des index de transfert entre clients et serveurs.
[[Category:faq]]
[[Category:xios]]
0726609e146216d668c6f64926e8b2809ce4d9e5
72
71
2021-01-23T23:21:49Z
Lfairhead
1
wikitext
text/x-wiki
Dans une simulation avec XIOS et LMDZ, XIOS affiche les messages suivants :
info : If domain dom_out does not have overlapped regions between processes something must be wrong with mask index
Vous pouvez ignorer ce message. Dans le cas de LMDZ, on a bien de "l'overlap" entre les domaines de sortie, donc pas de soucis. C'est une mise en garde plus pour les développeurs. Si effectivement on n'a pas de recouvrement entre les domaines, ce message peut être le signe d'un problème lors du calcul des index de transfert entre clients et serveurs.
[[Category:FAQ]]
[[Category:xios]]
77f1baa2ddfd873b539bd4189657803239b2fbe9
Nombre de variables trop grand dans un fichier d'historique, avec XIOS
0
41
73
2021-01-23T23:25:20Z
Lfairhead
1
Page créée avec « Symptôme : terminate called after throwing an instance of 'xios::CNetCdfException' what(): Error when calling function nc_enddef(ncId) NetCDF: HDF error Unable t... »
wikitext
text/x-wiki
Symptôme :
terminate called after throwing an instance of 'xios::CNetCdfException'
what(): Error when calling function nc_enddef(ncId)
NetCDF: HDF error
Unable to end define mode of this file, given its id: 65536
Program received signal SIGABRT: Process abort signal.
Ce problème peut se poser avec XIOS quand on augmente par exemple le niveau de sortie d'un fichier d'historique.
C'est un problème de netcdf4 + HDF5 en mode écriture parallèle. Pour une raison obscure, lorsqu'on tente de déclarer trop de champs avec trop de méta-données, une erreur se produit au moment de nc_enddef. C'est un problème de longue date qui combine le nombre de champs, associé à leurs tailles et au volume de méta-données, sans qu'il y ait pour autant une règle claire.
Les work-arounds :
* mettre moins de variables par fichier : baisser le niveau ou regrouper les variables par niveau dans un même fichier
* utiliser la version séquentielle qui fonctionne on ne sait pas trop pourquoi : avoir un seul processus ou un seul serveur XIOS ou utiliser les deux niveaux de serveur qui font des écritures séquentielles au final.
* utiliser pnetcdf (format classique) au lieu de netcdf4+HDF5 avec XIOS.
Je sais, c'est un peu lourd, mais on n'a pas vraiment le choix que de s'adapter à cette contrainte pour le moment, qui sera peut-être levée un jour.
[[Category:FAQ]]
[[Category:xios]]
6076326f8a7fadb6d9fcd673d5a34f9705c395e3
Eau Condensee Fisrtilp
0
7
74
42
2021-01-23T23:39:47Z
Lfairhead
1
wikitext
text/x-wiki
$$\newcommand{\Condl}{Conditions aux limites }
\newcommand{\condl}{conditions aux limites }
\newcommand{\cad}{c'est-\`a-dire }
\newcommand{\Cad}{C'est-\`a-dire }
\newcommand{\tem}{temp\'erature }
\newcommand{\tems}{temp\'eratures }
\newcommand{\Tpni}{T_{\text{p,ni}}}
\newcommand{\Tp}{T_{\text{p}}}
\newcommand{\qpni}{q_{\text{p,ni}}}
\newcommand{\qp}{q_{\text{p}}}
\newcommand{\qsati}{q_{\text{sat,i}}}
\newcommand{\qsat}{q_{\text{sat}}}
\newcommand{\hpni}{h_{\text{p,ni}}}
\newcommand{\hp}{h_{\text{p}}}
%*KEEP,mathwake,T=LATEX.
\newcommand{\nab}{\vec{\nabla}}
\newcommand{\V}{\vec{V}}
\newcommand{\Vt}{\vec{\tilde{V}}}
\newcommand{\F}{\vec{F}}
\newcommand{\NF}{\|\vec{F}\|}
\newcommand{\CD}{C_D}
\newcommand{\pt}{\tilde{p}}
\newcommand{\Dt}{\tilde{D}}
\newcommand{\thetat}{\tilde{\theta}}
\newcommand{\alphat}{\tilde{\alpha}}
\newcommand{\Mt}{\tilde{M}}
\newcommand{\rhot}{\tilde{\rho}}
\newcommand{\qt}{\tilde{q}}
\newcommand{\Tt}{\tilde{T}}
\newcommand{\wt}{\tilde{w}}
\newcommand{\wbar}{\overline{w}}
\newcommand{\ubar}{\overline{u}}
\newcommand{\vbar}{\overline{v}}
\newcommand{\qbar}{\overline{q_v}}
\newcommand{\omgb}{\overline{\omega}}
\newcommand{\omgwb}{\overline{\omega_w}}
\newcommand{\omgub}{\overline{\omega_u}}
\newcommand{\omgxb}{\overline{\omega_x}}
\newcommand{\thetab}{\overline{\theta}}
\newcommand{\qvb}{\overline{q_v}}
\newcommand{\qvwb}{\overline{q_{vw}}}
\newcommand{\qvxb}{\overline{q_{vx}}}
\newcommand{\qvw}{q_{vw}}
\newcommand{\qvx}{q_{vx}}
\newcommand{\thetawb}{\overline{\theta_w}}
\newcommand{\thetaub}{\overline{\theta_u}}
\newcommand{\thetaxb}{\overline{\theta_x}}
\newcommand{\uwb}{\overline{u_w}}
\newcommand{\uub}{\overline{u_u}}
\newcommand{\uxb}{\overline{u_x}}
\newcommand{\vwb}{\overline{v_w}}
\newcommand{\vub}{\overline{v_u}}
\newcommand{\vxb}{\overline{v_x}}
\newcommand{\vwhat}{\hat{v_w}}
\newcommand{\vuhat}{\hat{v_u}}
\newcommand{\vxhat}{\hat{v_x}}
\newcommand{\Kb}{\overline{K}}
\newcommand{\alphab}{\overline{\alpha}}
\newcommand{\alphawb}{\overline{\alpha_w}}
\newcommand{\alphaub}{\overline{\alpha_u}}
\newcommand{\alphaxb}{\overline{\alpha_x}}
\newcommand{\rhob}{\overline{\rho}}
\newcommand{\sigw}{\ensuremath{\sigma_w}}
\newcommand{\dlt}{\delta t}
\newcommand{\Xrz}{X_{r}}
\newcommand{\Xr}[1]{X_{r(#1)}}
\newcommand{\Xrpz}{X_{rp}}
\newcommand{\Xrp}[1]{X_{rp(#1)}}
\newcommand{\Xrvz}{X_{rv}}
\newcommand{\Xrv}[1]{X_{rv(#1)}}
\newcommand{\Xrhz}{\hat{X}_{r}}
\newcommand{\Xrh}[1]{\hat{X}_{r(#1)}}
%%%\newcommand{\dlts2}{\frac{\dlt}{2}}
\newcommand{\dsdlt}{\frac{2}{\dlt}}
\newcommand{\vphi}{\vec{\varphi}}
\newcommand{\veta}{\vec{\eta}}
\newcommand{\vtheta}{\vec{\theta}}
\newcommand{\veps}{\vec{\varepsilon}}
\newcommand{\delphi}{\vec{\delta \varphi}}
\newcommand{\vG}{\vec{G}}
\newcommand{\vf}{\vec{f}}
\newcommand{\n}{\vec{n}}
\newcommand{\rl}{\rho_{l}}
\newcommand{\rv}{\rho_{v}}
\newcommand{\vv}{\vec{V}_{v}}
\newcommand{\vl}{\vec{V}_{l}}
%%%\newcommand{\v}{\vec{V}}
\newcommand{\g}{\vec{g}}
\newcommand{\dsdt}{\frac {\partial }{\partial t}}
\newcommand{\dst}{\partial_t}
\newcommand{\dsp}{\partial_p}
\newcommand{\dsz}{\partial_z}
\newcommand{\dsy}{\partial_y}
\newcommand{\dsx}{\partial_x}
\newcommand{\dsth}{\partial_{\theta}}
\newcommand{\dsq}{\partial_q}
\newcommand{\dsv}{\partial_V}
\newcommand{\dalpha}{\delta \alpha}
\newcommand{\dw}{\delta w}
\newcommand{\dqv}{\delta q_v}
\newcommand{\dtheta}{\delta \theta}
\newcommand{\domg}{\delta \omega}
\newcommand{\domgcv}{\delta \omega^{\text{cv}}}
%%\newcommand{\domgtop}{\delta \omega_{\text{top}}}
\newcommand{\domgtop}{\delta \omega_{w}}
%%\newcommand{\domgupper}{\delta \omega_{\text{upper}}}
\newcommand{\domgupper}{\delta \omega_{h}}
%%\newcommand{\ptop}{p_{\text{top}}}
\newcommand{\ptop}{p_{w}}
%%\newcommand{\pupper}{p_{\text{upper}}}
\newcommand{\pupper}{p_{h}}
%%\newcommand{\htop}{h_{\text{top}}}
\newcommand{\htop}{h_{w}}
%%\newcommand{\hupper}{h_{\text{upper}}}
\newcommand{\hupper}{h_{h}}
\newcommand{\intw}{\int_{\Sigma_w}}
\newcommand{\intu}{\int_{\Sigma_u}}
\newcommand{\intx}{\int_{\Sigma_x}}
\newcommand{\inte}{\int_{\Sigma_e}}
\newcommand{\intp}{\int_{\Sigma'}}
\newcommand{\intgw}{\int_{\Gamma_{w,in}}}
\newcommand{\intgwp}{\int_{\Gamma_{w,in}^+}}
\newcommand{\intgwm}{\int_{\Gamma_{w,in}^-}}
\newcommand{\intg}{\int_{\Gamma}}
\newcommand{\intgp}{\int_{\Gamma'}}
\newcommand{\intgpe}{\int_{\Gamma'_e}}
\newcommand{\intgpu}{\int_{\Gamma'_u}}
\newcommand{\intgpx}{\int_{\Gamma'_x}}
\newcommand{\intgpw}{\int_{\Gamma'_w}}
\newcommand{\kgw}{k_{\text{gw}}}
\newcommand{\taugw}{\tau_{\text{gw}}}
\newcommand{\klift}{k_{\text{lift}}}
%%\newcommand{\kliftw}{k_{\text{lift,wk}}}
\newcommand{\kliftw}{\mathcal{E}_{\text{lift}}^{\text{wk}}}
\newcommand{\Eliftw}{\mathcal{E}_{\text{lift}}^{\text{wk}}}
\newcommand{\Pb}{\ensuremath{P_{\text{buoy}}}}
\newcommand{\Pliftw}{\ensuremath{P_{\text{lift}}^{\text{wk}}}}
\newcommand{\Pliftwh}{\ensuremath{\widehat{P_{\text{lift}}^{\text{wk}}}}}
\newcommand{\Pliftwp}{\ensuremath{\widetilde{P_{\text{lift}}^{\text{wk}}}}}
\newcommand{\LG}{\ensuremath{L_{\Gamma}}}
\newcommand{\LGh}{\ensuremath{\widehat{L_{\Gamma}}}}
\newcommand{\LGp}{\ensuremath{\widetilde{L_{\Gamma}}}}
\newcommand{\LGt}{\ensuremath{\widetilde{L_{\Gamma}}}}
\newcommand{\Dw}{\ensuremath{D_{\text{wk}}}}
\newcommand{\QI}{\ensuremath{Q_1}}
\newcommand{\DQI}{\ensuremath{\delta Q_1}}
\newcommand{\QIsat}{\ensuremath{Q_{1}^{\text{sat}}}}
\newcommand{\QIcvsat}{\ensuremath{Q_{1}^{\text{cv,sat}}}}
\newcommand{\QIunsat}{\ensuremath{Q_{1}^{\text{unsat}}}}
\newcommand{\QIcvunsat}{\ensuremath{Q_{1}^{\text{cv,unsat}}}}
\newcommand{\QIIsat}{\ensuremath{Q_{2}^{\text{sat}}}}
\newcommand{\QIIcvsat}{\ensuremath{Q_{2}^{\text{cv,sat}}}}
\newcommand{\QIIunsat}{\ensuremath{Q_{2}^{\text{unsat}}}}
\newcommand{\QIIcvunsat}{\ensuremath{Q_{2}^{\text{cv,unsat}}}}
\newcommand{\QIw}{\ensuremath{Q_{1,w}}}
\newcommand{\QIcvw}{\ensuremath{Q_{1,w}^{\text{cv}}}}
\newcommand{\QIx}{\ensuremath{Q_{1,x}}}
\newcommand{\QIcvx}{\ensuremath{Q_{1,x}^{\text{cv}}}}
\newcommand{\QIcv}{\ensuremath{Q_{1}^{\text{cv}}}}
\newcommand{\DQIcv}{\ensuremath{\delta Q_{1}^{\text{cv}}}}
\newcommand{\QIbl}{\ensuremath{Q_{1}^{\text{bl}}}}
\newcommand{\QIcl}{\ensuremath{Q_{1}^{\text{cl}}}}
\newcommand{\QIwk}{\ensuremath{Q_{1}^{\text{wk}}}}
\newcommand{\DQIwk}{\ensuremath{\delta Q_{1}^{\text{wk}}}}
\newcommand{\QIp}{\ensuremath{Q_{1,p}}}
\newcommand{\QIS}{\ensuremath{\mathcal{Q}_{1}^S}}
\newcommand{\QID}{\ensuremath{\mathcal{Q}_{1}^D}}
\newcommand{\QIT}{\ensuremath{\mathcal{Q}_{1}^T}}
\newcommand{\QIE}{\ensuremath{\mathcal{Q}_{1}^E}}
\newcommand{\QII}{\ensuremath{Q_2}}
\newcommand{\DQII}{\ensuremath{\delta Q_2}}
\newcommand{\QIIw}{\ensuremath{Q_{2,w}}}
\newcommand{\QIIcvw}{\ensuremath{Q_{2,w}^{\text{cv}}}}
\newcommand{\QIIx}{\ensuremath{Q_{2,x}}}
\newcommand{\QIIcvx}{\ensuremath{Q_{2,x}^{\text{cv}}}}
\newcommand{\QIIcv}{\ensuremath{Q_{2}^{\text{cv}}}}
\newcommand{\DQIIcv}{\ensuremath{\delta Q_{2}^{\text{cv}}}}
\newcommand{\QIIbl}{\ensuremath{Q_{2}^{\text{bl}}}}
\newcommand{\QIIcl}{\ensuremath{Q_{2}^{\text{cl}}}}
\newcommand{\QIIwk}{\ensuremath{Q_{2}^{\text{wk}}}}
\newcommand{\DQIIwk}{\ensuremath{\delta Q_{2}^{\text{wk}}}}
\newcommand{\QIIp}{\ensuremath{Q_{2,p}}}
\newcommand{\QIIS}{\ensuremath{\mathcal{Q}_{2}^S}}
\newcommand{\QIID}{\ensuremath{\mathcal{Q}_{2}^D}}
\newcommand{\QIIT}{\ensuremath{\mathcal{Q}_{2}^T}}
\newcommand{\QIIE}{\ensuremath{\mathcal{Q}_{2}^E}}
\newcommand{\Sig}{\ensuremath{\Sigma\;}}
\newcommand{\Sigp}{\ensuremath{\Sigma'\;}}
\newcommand{\Sigw}{\ensuremath{\Sigma_w\;}}
\newcommand{\Sige}{\ensuremath{\Sigma_e}}
\newcommand{\Sigu}{\ensuremath{\Sigma_u}}
\newcommand{\Sigx}{\ensuremath{\Sigma_x}}
\newcommand{\Wb}{\ensuremath{W_{\text{buoy}}}}
\newcommand{\Wbb}{\bar{\bar{W}}}
\newcommand{\wa}{\langle w\rangle}
\newcommand{\wpa}{\langle w'\rangle}
\newcommand{\wwa}{\langle w^2\rangle}
\newcommand{\wwwa}{\langle w^3\rangle}
\newcommand{\wwpa}{\langle w^{\prime\prime\prime 2}\rangle}$$
Le but de cette note est d'établir les formules menant à la détermination des quantités
d'eau condensées sous forme d'eau liquide et de glace dans le sous-programme Fisrtilp. La
principale difficulté réside dans le fait que la condensation dégage de la chaleur latente
et que $$\qsat$$ dépend de la température. Dans tous ces calculs, on considère une couche
atmosphérique sans condensat de température $$T$$ et d'humidité spécifique $$q$$ et on se
donne la fraction $$f$$ de la maille où se produit la condensation. Le principe est d'écrire
que l'énergie statique humide et la quantité d'eau totale sont conservées dans le
processus de condensation.
Dans la première version créée par Laurent Li, on suppose que seule la partie
nuageuse de la maille voit sa température augmenter du fait de la condensation. Alors le
système que l'on décrit présente des températures différentes dans le nuage et hors du
nuage.
Laurent Li résoud :
\begin{equation}
C_p T' \;+\; L_v \qsat(T') \;=\; C_p T \;+\; L_v q
\label{eq.init}
\end{equation}
étant entendu que cela s'applique à la partie nuageuse de la maille.
Nous voulons, au contraire, écrire que les températures sont toujours uniformisées
horizontalement très rapidement (et même on va supposer instantanément). En outre nous
allons généraliser les calculs au cas où de la condensation solide est présente et nous
allons profiter de l'occasion pour écrire des formules complètes prenant en compte la
variation des chaleurs latentes avec la température (voir dans l'annexe les formules donnant
l'énergie statique humide $$h$$).
== Écriture des équations de conservation ==
Soit donc $$f$$ la fraction nuageuse. On écrit que sur $$f$$ il y a condensation et que sur
$$(1-f)$$ il n'y a pas de changement de phase. On suppose connu le contenu massique total
d'eau $$q_n$$ (i.e. vapeur + liquide + glace) dans le nuage. En désignant par $$T'$$ la
température (uniforme) après condensation et par $$q"$$ l'humidité spécifique hors des
nuages, les énergies statiques massiques initiale $$h$$, dans le nuage $$h_n$$ et hors du
nuage $$h"$$ s'écrivent~:
\begin{equation}
\left \lbrace
\begin{array}{ll}
h_n &=\;[(1-q_n)C_{pd} + q_n C_l] T' + L_v \qsat - L_f q_i + gz \\
h" &=\;[(1-q")C_{pd} + q"C_l] T' + L_v q" + gz \\
h &=\;[(1-q)C_{pd} + q C_l] T + L_v q + gz \\
\end{array}
\right .
\end{equation}
où $$\qsat$$ désigne l'humidité saturante. Ce peut être l'humidité saturante à la
température $$T'$$ sur l'eau liquide ou sur la glace. A voir plus loin.
La conservation de l'énergie statique humide et de l'eau s'écrit~:
\begin{equation}
\left \lbrace
\begin{array}{ll}
f h_n + (1-f)h" &=\;h \\
f q_n + (1-f)q" &=\;q \\
\end{array}
\right .
\end{equation}
Ce qui donne~:
\begin{equation}
\left \lbrace
\begin{array}{l}
T'[C_{pd} + (f q_n + (1-f) q") (C_l-C_{pd})] + L_v [f \qsat + (1-f)q"] - L_f f q_i \\
\qquad \qquad = [C_{pd} + q (C_l-C_{pd})] T + L_v q \\
\\
q = f q_n + (1-f) q"\\
\end{array}
\right .
\end{equation}
Soit, en posant $$C_p = C_{pd} + (C_l-C_{pd}) q$$~:
\begin{equation}
\left \lbrace
\begin{array}{l}
C_p T' - f [L_v(q_n-\qsat) + L_f q_i] = C_p T \\
q = f q_n + (1-f) q"\\
\end{array}
\right .
\end{equation}
Maintenant nous supposons que la glace représente une fraction $$\gamma$$ du condensat~:
$$q_i = \gamma (q_n - \qsat)$$. Finalement les équations de conservation s'écrivent~:
\begin{equation}
\label{eq.conserv_fin}
\left \lbrace
\begin{array}{l}
C_p T' - f (L_v+\gamma L_f)(q_n-\qsat) = C_p T \\
q = f q_n + (1-f) q"\\
\end{array}
\right .
\end{equation}
== Mise en oeuvre ==
Nous supposons maintenant que $$\qsat$$ est égale à l'humidité saturante sur eau liquide
lorsqu'il n'y a pas de glace et à l'humidité saturante sur glace dès que la glace est
présente.
L'équation (\ref{eq.conserv_fin}) pour la température peut être écrite sous une forme
analogue à l'équation initiale (\ref{eq.init}) de Laurent Li~:
\begin{equation}
\label{eq.conserv_fin_lli}
C_p T' \;+\; f (L_v+\gamma L_f) \qsat(T')] \;=\; C_p T \;+\; f (L_v+\gamma L_f) q_n
\end{equation}
On constate que l'on passe de l'équation (\ref{eq.init}) à l'équation
(\ref{eq.conserv_fin_lli}) en remplaçant $$L_v$$ par $$f (L_v+\gamma L_f)$$ et $$q$$ par $$q_n$$.
L'itération convergeant vers $$T'$$ s'obtient ainsi directement à partir des formules de
Laurent~:
\begin{equation}
\displaystyle{
T'_{j+1}\;=\;T'_j\;+\;\frac{T-T'_j\;+\;\frac{f (L_v+\gamma L_f)}{C_p}[q_n\;-\;\qsat(T'_j)]}
{1\;+\;\frac{f (L_v+\gamma L_f)}{C_p}\partial_T\qsat(T'_j)} }
\label{eq.iter}
\end{equation}
L'expérience montre que cette itération converge assez vite, en 3 ou 4 passages. Elle va
fournir une valeur approchée $$T'_a$$ à partir de laquelle on peut calculer l'eau condensée~:
$$
c\;=\;f[q_n\;-\;\qsat(T'_a)]
$$
et les estimations finales de la température $$T'$$ et de l'humidité $$q'$$ telles que
l'énergie et l'eau soient exactement conservées~:
\begin{equation}
\left \lbrace
\begin{array}{l}
T'\;=\; T\;+\;\frac{L_v+\gamma L_f}{C_p}c \\
q'\;=\;q\;-\;c \\
\end{array}
\right .
\end{equation}
== Annexe: définitions des enthalpies et énergies statiques massiques ==
=== I - Enthalpies massiques~: ===
Grandeurs conservées dans les \underline{transformations adiabatiques
isobares}.
\begin{equation}
\begin{array}{ll}
\left \lbrace
\begin{array}{lll}
k &=& (1-q_t) k_d + q_v k_v + q_l k_l + q_i k_i \\
L_v(T) &=& k_v - k_l \\
L_s(T) &=& k_v - k_i\;, \quad L_f(T) = L_s(T)-L_v(T)\\
k_d &=& C_{pd} T \\
k_l &=& C_l T \\
k_i &=& C_i T \\
\end{array}
\right \rbrace & \left .
\begin{array}{l}
\rm{enthalpie} \\
k=[(1-q_t) C_{pd} +q_t C_l] T + L_v q_v - L_f q_i\\
\end{array} \right .
\end{array}
\end{equation}
Comme $$L_v-(C_{pv}-C_l)T = \rm{cste}$$,
l'enthalpie avec eau liquide $$k_w=k-q_t[L_v-(C_{pv}-C_l)T]$$
est aussi conservée dans les transformations adiabatiques isobares~:
$$
k_w = [(1-q_t) C_{pd} + q_t C_{pv}] T - L_v q_l - L_s q_i
$$
On peut faire le même genre de chose pour obtenir une expression sans $$q_i$$,
ce qui donne~: et comme $$L_f-(C_l-C_i)T = \rm{cste}$$, l'enthalpie (sans nom)
$$k_i=k-q_t[L_f-(C_l-C_i)T]$$ est aussi conservée dans les transformations
adiabatiques isobares~:
$$
k_i = [(1-q_t) C_{pd} + q_t C_i] T+ L_s q_v + L_f q_l
$$
=== II - Energies statiques~: ===
Grandeurs conservées dans les \\
\underline{transformations adiabatiques où le changement
de pression est purement hydrostatique}.
\begin{equation}
\begin{array}{ll}
\left .
\begin{array}{lll}
\rm{Adiabatisme :} & dk &\displaystyle{=\frac{dp}{\rho} }\\
& & \\
\rm{Hydrostasie :} & \displaystyle{\frac{dp}{\rho} }&= -g dz
\end{array}
\right \rbrace & \left .
\begin{array}{l}
dk + g dz = 0 \\
\end{array} \right .
\end{array}
\end{equation}
{| border="1" style="border-collapse:collapse"
| Energie statique humide :
| $$h=[(1-q_t)C_{pd}+q_tC_l]T + L_v q_v - L_f q_i + gz$$
|-
| Energie statique avec eau liquide :
| $$h_w=[(1-q_t)C_{pd}+q_tC_{pv}]T - L_vq_l - L_s q_i + gz$$
|-
| Energie statique sans nom :
| $$h_i=[(1-q_t) C_{pd} + q_t C_i] T+ L_s q_v + L_f q_l + gz$$
|-
| Energie statique sèche :
| $$h_d=[(1-q)C_{pd}+qC_{pv}]T +gz$$ <br />
(= $$h_w$$ avec $$q_l\;=\;0$$ et $$q_i\;=\;0$$)
|}
[[Category:Physique]]
262f4f93493caad83769be5e542cb96f08f91a0c
75
74
2021-01-23T23:41:02Z
Lfairhead
1
wikitext
text/x-wiki
$$\newcommand{\Condl}{Conditions aux limites }
\newcommand{\condl}{conditions aux limites }
\newcommand{\cad}{c'est-\`a-dire }
\newcommand{\Cad}{C'est-\`a-dire }
\newcommand{\tem}{temp\'erature }
\newcommand{\tems}{temp\'eratures }
\newcommand{\Tpni}{T_{\text{p,ni}}}
\newcommand{\Tp}{T_{\text{p}}}
\newcommand{\qpni}{q_{\text{p,ni}}}
\newcommand{\qp}{q_{\text{p}}}
\newcommand{\qsati}{q_{\text{sat,i}}}
\newcommand{\qsat}{q_{\text{sat}}}
\newcommand{\hpni}{h_{\text{p,ni}}}
\newcommand{\hp}{h_{\text{p}}}
%*KEEP,mathwake,T=LATEX.
\newcommand{\nab}{\vec{\nabla}}
\newcommand{\V}{\vec{V}}
\newcommand{\Vt}{\vec{\tilde{V}}}
\newcommand{\F}{\vec{F}}
\newcommand{\NF}{\|\vec{F}\|}
\newcommand{\CD}{C_D}
\newcommand{\pt}{\tilde{p}}
\newcommand{\Dt}{\tilde{D}}
\newcommand{\thetat}{\tilde{\theta}}
\newcommand{\alphat}{\tilde{\alpha}}
\newcommand{\Mt}{\tilde{M}}
\newcommand{\rhot}{\tilde{\rho}}
\newcommand{\qt}{\tilde{q}}
\newcommand{\Tt}{\tilde{T}}
\newcommand{\wt}{\tilde{w}}
\newcommand{\wbar}{\overline{w}}
\newcommand{\ubar}{\overline{u}}
\newcommand{\vbar}{\overline{v}}
\newcommand{\qbar}{\overline{q_v}}
\newcommand{\omgb}{\overline{\omega}}
\newcommand{\omgwb}{\overline{\omega_w}}
\newcommand{\omgub}{\overline{\omega_u}}
\newcommand{\omgxb}{\overline{\omega_x}}
\newcommand{\thetab}{\overline{\theta}}
\newcommand{\qvb}{\overline{q_v}}
\newcommand{\qvwb}{\overline{q_{vw}}}
\newcommand{\qvxb}{\overline{q_{vx}}}
\newcommand{\qvw}{q_{vw}}
\newcommand{\qvx}{q_{vx}}
\newcommand{\thetawb}{\overline{\theta_w}}
\newcommand{\thetaub}{\overline{\theta_u}}
\newcommand{\thetaxb}{\overline{\theta_x}}
\newcommand{\uwb}{\overline{u_w}}
\newcommand{\uub}{\overline{u_u}}
\newcommand{\uxb}{\overline{u_x}}
\newcommand{\vwb}{\overline{v_w}}
\newcommand{\vub}{\overline{v_u}}
\newcommand{\vxb}{\overline{v_x}}
\newcommand{\vwhat}{\hat{v_w}}
\newcommand{\vuhat}{\hat{v_u}}
\newcommand{\vxhat}{\hat{v_x}}
\newcommand{\Kb}{\overline{K}}
\newcommand{\alphab}{\overline{\alpha}}
\newcommand{\alphawb}{\overline{\alpha_w}}
\newcommand{\alphaub}{\overline{\alpha_u}}
\newcommand{\alphaxb}{\overline{\alpha_x}}
\newcommand{\rhob}{\overline{\rho}}
\newcommand{\sigw}{\ensuremath{\sigma_w}}
\newcommand{\dlt}{\delta t}
\newcommand{\Xrz}{X_{r}}
\newcommand{\Xr}[1]{X_{r(#1)}}
\newcommand{\Xrpz}{X_{rp}}
\newcommand{\Xrp}[1]{X_{rp(#1)}}
\newcommand{\Xrvz}{X_{rv}}
\newcommand{\Xrv}[1]{X_{rv(#1)}}
\newcommand{\Xrhz}{\hat{X}_{r}}
\newcommand{\Xrh}[1]{\hat{X}_{r(#1)}}
%%%\newcommand{\dlts2}{\frac{\dlt}{2}}
\newcommand{\dsdlt}{\frac{2}{\dlt}}
\newcommand{\vphi}{\vec{\varphi}}
\newcommand{\veta}{\vec{\eta}}
\newcommand{\vtheta}{\vec{\theta}}
\newcommand{\veps}{\vec{\varepsilon}}
\newcommand{\delphi}{\vec{\delta \varphi}}
\newcommand{\vG}{\vec{G}}
\newcommand{\vf}{\vec{f}}
\newcommand{\n}{\vec{n}}
\newcommand{\rl}{\rho_{l}}
\newcommand{\rv}{\rho_{v}}
\newcommand{\vv}{\vec{V}_{v}}
\newcommand{\vl}{\vec{V}_{l}}
%%%\newcommand{\v}{\vec{V}}
\newcommand{\g}{\vec{g}}
\newcommand{\dsdt}{\frac {\partial }{\partial t}}
\newcommand{\dst}{\partial_t}
\newcommand{\dsp}{\partial_p}
\newcommand{\dsz}{\partial_z}
\newcommand{\dsy}{\partial_y}
\newcommand{\dsx}{\partial_x}
\newcommand{\dsth}{\partial_{\theta}}
\newcommand{\dsq}{\partial_q}
\newcommand{\dsv}{\partial_V}
\newcommand{\dalpha}{\delta \alpha}
\newcommand{\dw}{\delta w}
\newcommand{\dqv}{\delta q_v}
\newcommand{\dtheta}{\delta \theta}
\newcommand{\domg}{\delta \omega}
\newcommand{\domgcv}{\delta \omega^{\text{cv}}}
%%\newcommand{\domgtop}{\delta \omega_{\text{top}}}
\newcommand{\domgtop}{\delta \omega_{w}}
%%\newcommand{\domgupper}{\delta \omega_{\text{upper}}}
\newcommand{\domgupper}{\delta \omega_{h}}
%%\newcommand{\ptop}{p_{\text{top}}}
\newcommand{\ptop}{p_{w}}
%%\newcommand{\pupper}{p_{\text{upper}}}
\newcommand{\pupper}{p_{h}}
%%\newcommand{\htop}{h_{\text{top}}}
\newcommand{\htop}{h_{w}}
%%\newcommand{\hupper}{h_{\text{upper}}}
\newcommand{\hupper}{h_{h}}
\newcommand{\intw}{\int_{\Sigma_w}}
\newcommand{\intu}{\int_{\Sigma_u}}
\newcommand{\intx}{\int_{\Sigma_x}}
\newcommand{\inte}{\int_{\Sigma_e}}
\newcommand{\intp}{\int_{\Sigma'}}
\newcommand{\intgw}{\int_{\Gamma_{w,in}}}
\newcommand{\intgwp}{\int_{\Gamma_{w,in}^+}}
\newcommand{\intgwm}{\int_{\Gamma_{w,in}^-}}
\newcommand{\intg}{\int_{\Gamma}}
\newcommand{\intgp}{\int_{\Gamma'}}
\newcommand{\intgpe}{\int_{\Gamma'_e}}
\newcommand{\intgpu}{\int_{\Gamma'_u}}
\newcommand{\intgpx}{\int_{\Gamma'_x}}
\newcommand{\intgpw}{\int_{\Gamma'_w}}
\newcommand{\kgw}{k_{\text{gw}}}
\newcommand{\taugw}{\tau_{\text{gw}}}
\newcommand{\klift}{k_{\text{lift}}}
%%\newcommand{\kliftw}{k_{\text{lift,wk}}}
\newcommand{\kliftw}{\mathcal{E}_{\text{lift}}^{\text{wk}}}
\newcommand{\Eliftw}{\mathcal{E}_{\text{lift}}^{\text{wk}}}
\newcommand{\Pb}{\ensuremath{P_{\text{buoy}}}}
\newcommand{\Pliftw}{\ensuremath{P_{\text{lift}}^{\text{wk}}}}
\newcommand{\Pliftwh}{\ensuremath{\widehat{P_{\text{lift}}^{\text{wk}}}}}
\newcommand{\Pliftwp}{\ensuremath{\widetilde{P_{\text{lift}}^{\text{wk}}}}}
\newcommand{\LG}{\ensuremath{L_{\Gamma}}}
\newcommand{\LGh}{\ensuremath{\widehat{L_{\Gamma}}}}
\newcommand{\LGp}{\ensuremath{\widetilde{L_{\Gamma}}}}
\newcommand{\LGt}{\ensuremath{\widetilde{L_{\Gamma}}}}
\newcommand{\Dw}{\ensuremath{D_{\text{wk}}}}
\newcommand{\QI}{\ensuremath{Q_1}}
\newcommand{\DQI}{\ensuremath{\delta Q_1}}
\newcommand{\QIsat}{\ensuremath{Q_{1}^{\text{sat}}}}
\newcommand{\QIcvsat}{\ensuremath{Q_{1}^{\text{cv,sat}}}}
\newcommand{\QIunsat}{\ensuremath{Q_{1}^{\text{unsat}}}}
\newcommand{\QIcvunsat}{\ensuremath{Q_{1}^{\text{cv,unsat}}}}
\newcommand{\QIIsat}{\ensuremath{Q_{2}^{\text{sat}}}}
\newcommand{\QIIcvsat}{\ensuremath{Q_{2}^{\text{cv,sat}}}}
\newcommand{\QIIunsat}{\ensuremath{Q_{2}^{\text{unsat}}}}
\newcommand{\QIIcvunsat}{\ensuremath{Q_{2}^{\text{cv,unsat}}}}
\newcommand{\QIw}{\ensuremath{Q_{1,w}}}
\newcommand{\QIcvw}{\ensuremath{Q_{1,w}^{\text{cv}}}}
\newcommand{\QIx}{\ensuremath{Q_{1,x}}}
\newcommand{\QIcvx}{\ensuremath{Q_{1,x}^{\text{cv}}}}
\newcommand{\QIcv}{\ensuremath{Q_{1}^{\text{cv}}}}
\newcommand{\DQIcv}{\ensuremath{\delta Q_{1}^{\text{cv}}}}
\newcommand{\QIbl}{\ensuremath{Q_{1}^{\text{bl}}}}
\newcommand{\QIcl}{\ensuremath{Q_{1}^{\text{cl}}}}
\newcommand{\QIwk}{\ensuremath{Q_{1}^{\text{wk}}}}
\newcommand{\DQIwk}{\ensuremath{\delta Q_{1}^{\text{wk}}}}
\newcommand{\QIp}{\ensuremath{Q_{1,p}}}
\newcommand{\QIS}{\ensuremath{\mathcal{Q}_{1}^S}}
\newcommand{\QID}{\ensuremath{\mathcal{Q}_{1}^D}}
\newcommand{\QIT}{\ensuremath{\mathcal{Q}_{1}^T}}
\newcommand{\QIE}{\ensuremath{\mathcal{Q}_{1}^E}}
\newcommand{\QII}{\ensuremath{Q_2}}
\newcommand{\DQII}{\ensuremath{\delta Q_2}}
\newcommand{\QIIw}{\ensuremath{Q_{2,w}}}
\newcommand{\QIIcvw}{\ensuremath{Q_{2,w}^{\text{cv}}}}
\newcommand{\QIIx}{\ensuremath{Q_{2,x}}}
\newcommand{\QIIcvx}{\ensuremath{Q_{2,x}^{\text{cv}}}}
\newcommand{\QIIcv}{\ensuremath{Q_{2}^{\text{cv}}}}
\newcommand{\DQIIcv}{\ensuremath{\delta Q_{2}^{\text{cv}}}}
\newcommand{\QIIbl}{\ensuremath{Q_{2}^{\text{bl}}}}
\newcommand{\QIIcl}{\ensuremath{Q_{2}^{\text{cl}}}}
\newcommand{\QIIwk}{\ensuremath{Q_{2}^{\text{wk}}}}
\newcommand{\DQIIwk}{\ensuremath{\delta Q_{2}^{\text{wk}}}}
\newcommand{\QIIp}{\ensuremath{Q_{2,p}}}
\newcommand{\QIIS}{\ensuremath{\mathcal{Q}_{2}^S}}
\newcommand{\QIID}{\ensuremath{\mathcal{Q}_{2}^D}}
\newcommand{\QIIT}{\ensuremath{\mathcal{Q}_{2}^T}}
\newcommand{\QIIE}{\ensuremath{\mathcal{Q}_{2}^E}}
\newcommand{\Sig}{\ensuremath{\Sigma\;}}
\newcommand{\Sigp}{\ensuremath{\Sigma'\;}}
\newcommand{\Sigw}{\ensuremath{\Sigma_w\;}}
\newcommand{\Sige}{\ensuremath{\Sigma_e}}
\newcommand{\Sigu}{\ensuremath{\Sigma_u}}
\newcommand{\Sigx}{\ensuremath{\Sigma_x}}
\newcommand{\Wb}{\ensuremath{W_{\text{buoy}}}}
\newcommand{\Wbb}{\bar{\bar{W}}}
\newcommand{\wa}{\langle w\rangle}
\newcommand{\wpa}{\langle w'\rangle}
\newcommand{\wwa}{\langle w^2\rangle}
\newcommand{\wwwa}{\langle w^3\rangle}
\newcommand{\wwpa}{\langle w^{\prime\prime\prime 2}\rangle}$$
Le but de cette note est d'établir les formules menant à la détermination des quantités
d'eau condensées sous forme d'eau liquide et de glace dans le sous-programme Fisrtilp. La
principale difficulté réside dans le fait que la condensation dégage de la chaleur latente
et que $$\qsat$$ dépend de la température. Dans tous ces calculs, on considère une couche
atmosphérique sans condensat de température $$T$$ et d'humidité spécifique $$q$$ et on se
donne la fraction $$f$$ de la maille où se produit la condensation. Le principe est d'écrire
que l'énergie statique humide et la quantité d'eau totale sont conservées dans le
processus de condensation.
Dans la première version créée par Laurent Li, on suppose que seule la partie
nuageuse de la maille voit sa température augmenter du fait de la condensation. Alors le
système que l'on décrit présente des températures différentes dans le nuage et hors du
nuage.
Laurent Li résoud :
\begin{equation}
C_p T' \;+\; L_v \qsat(T') \;=\; C_p T \;+\; L_v q
\label{eq.init}
\end{equation}
étant entendu que cela s'applique à la partie nuageuse de la maille.
Nous voulons, au contraire, écrire que les températures sont toujours uniformisées
horizontalement très rapidement (et même on va supposer instantanément). En outre nous
allons généraliser les calculs au cas où de la condensation solide est présente et nous
allons profiter de l'occasion pour écrire des formules complètes prenant en compte la
variation des chaleurs latentes avec la température (voir dans l'annexe les formules donnant
l'énergie statique humide $$h$$).
== Écriture des équations de conservation ==
Soit donc $$f$$ la fraction nuageuse. On écrit que sur $$f$$ il y a condensation et que sur
$$(1-f)$$ il n'y a pas de changement de phase. On suppose connu le contenu massique total
d'eau $$q_n$$ (i.e. vapeur + liquide + glace) dans le nuage. En désignant par $$T'$$ la
température (uniforme) après condensation et par $$q"$$ l'humidité spécifique hors des
nuages, les énergies statiques massiques initiale $$h$$, dans le nuage $$h_n$$ et hors du
nuage $$h"$$ s'écrivent~:
\begin{equation}
\left \lbrace
\begin{array}{ll}
h_n &=\;[(1-q_n)C_{pd} + q_n C_l] T' + L_v \qsat - L_f q_i + gz \\
h" &=\;[(1-q")C_{pd} + q"C_l] T' + L_v q" + gz \\
h &=\;[(1-q)C_{pd} + q C_l] T + L_v q + gz \\
\end{array}
\right .
\end{equation}
où $$\qsat$$ désigne l'humidité saturante. Ce peut être l'humidité saturante à la
température $$T'$$ sur l'eau liquide ou sur la glace. A voir plus loin.
La conservation de l'énergie statique humide et de l'eau s'écrit~:
\begin{equation}
\left \lbrace
\begin{array}{ll}
f h_n + (1-f)h" &=\;h \\
f q_n + (1-f)q" &=\;q \\
\end{array}
\right .
\end{equation}
Ce qui donne~:
\begin{equation}
\left \lbrace
\begin{array}{l}
T'[C_{pd} + (f q_n + (1-f) q") (C_l-C_{pd})] + L_v [f \qsat + (1-f)q"] - L_f f q_i \\
\qquad \qquad = [C_{pd} + q (C_l-C_{pd})] T + L_v q \\
\\
q = f q_n + (1-f) q"\\
\end{array}
\right .
\end{equation}
Soit, en posant $$C_p = C_{pd} + (C_l-C_{pd}) q$$~:
\begin{equation}
\left \lbrace
\begin{array}{l}
C_p T' - f [L_v(q_n-\qsat) + L_f q_i] = C_p T \\
q = f q_n + (1-f) q"\\
\end{array}
\right .
\end{equation}
Maintenant nous supposons que la glace représente une fraction $$\gamma$$ du condensat~:
$$q_i = \gamma (q_n - \qsat)$$. Finalement les équations de conservation s'écrivent~:
\begin{equation}
\label{eq.conserv_fin}
\left \lbrace
\begin{array}{l}
C_p T' - f (L_v+\gamma L_f)(q_n-\qsat) = C_p T \\
q = f q_n + (1-f) q"\\
\end{array}
\right .
\end{equation}
== Mise en oeuvre ==
Nous supposons maintenant que $$\qsat$$ est égale à l'humidité saturante sur eau liquide
lorsqu'il n'y a pas de glace et à l'humidité saturante sur glace dès que la glace est
présente.
L'équation (\ref{eq.conserv_fin}) pour la température peut être écrite sous une forme
analogue à l'équation initiale (\ref{eq.init}) de Laurent Li~:
\begin{equation}
\label{eq.conserv_fin_lli}
C_p T' \;+\; f (L_v+\gamma L_f) \qsat(T')] \;=\; C_p T \;+\; f (L_v+\gamma L_f) q_n
\end{equation}
On constate que l'on passe de l'équation (\ref{eq.init}) à l'équation
(\ref{eq.conserv_fin_lli}) en remplaçant $$L_v$$ par $$f (L_v+\gamma L_f)$$ et $$q$$ par $$q_n$$.
L'itération convergeant vers $$T'$$ s'obtient ainsi directement à partir des formules de
Laurent~:
\begin{equation}
\displaystyle{
T'_{j+1}\;=\;T'_j\;+\;\frac{T-T'_j\;+\;\frac{f (L_v+\gamma L_f)}{C_p}[q_n\;-\;\qsat(T'_j)]}
{1\;+\;\frac{f (L_v+\gamma L_f)}{C_p}\partial_T\qsat(T'_j)} }
\label{eq.iter}
\end{equation}
L'expérience montre que cette itération converge assez vite, en 3 ou 4 passages. Elle va
fournir une valeur approchée $$T'_a$$ à partir de laquelle on peut calculer l'eau condensée~:
$$
c\;=\;f[q_n\;-\;\qsat(T'_a)]
$$
et les estimations finales de la température $$T'$$ et de l'humidité $$q'$$ telles que
l'énergie et l'eau soient exactement conservées~:
\begin{equation}
\left \lbrace
\begin{array}{l}
T'\;=\; T\;+\;\frac{L_v+\gamma L_f}{C_p}c \\
q'\;=\;q\;-\;c \\
\end{array}
\right .
\end{equation}
== Annexe: définitions des enthalpies et énergies statiques massiques ==
=== I - Enthalpies massiques: ===
Grandeurs conservées dans les \underline{transformations adiabatiques
isobares}.
\begin{equation}
\begin{array}{ll}
\left \lbrace
\begin{array}{lll}
k &=& (1-q_t) k_d + q_v k_v + q_l k_l + q_i k_i \\
L_v(T) &=& k_v - k_l \\
L_s(T) &=& k_v - k_i\;, \quad L_f(T) = L_s(T)-L_v(T)\\
k_d &=& C_{pd} T \\
k_l &=& C_l T \\
k_i &=& C_i T \\
\end{array}
\right \rbrace & \left .
\begin{array}{l}
\rm{enthalpie} \\
k=[(1-q_t) C_{pd} +q_t C_l] T + L_v q_v - L_f q_i\\
\end{array} \right .
\end{array}
\end{equation}
Comme $$L_v-(C_{pv}-C_l)T = \rm{cste}$$,
l'enthalpie avec eau liquide $$k_w=k-q_t[L_v-(C_{pv}-C_l)T]$$
est aussi conservée dans les transformations adiabatiques isobares~:
$$
k_w = [(1-q_t) C_{pd} + q_t C_{pv}] T - L_v q_l - L_s q_i
$$
On peut faire le même genre de chose pour obtenir une expression sans $$q_i$$,
ce qui donne~: et comme $$L_f-(C_l-C_i)T = \rm{cste}$$, l'enthalpie (sans nom)
$$k_i=k-q_t[L_f-(C_l-C_i)T]$$ est aussi conservée dans les transformations
adiabatiques isobares~:
$$
k_i = [(1-q_t) C_{pd} + q_t C_i] T+ L_s q_v + L_f q_l
$$
=== II - Energies statiques: ===
Grandeurs conservées dans les \\
\underline{transformations adiabatiques où le changement
de pression est purement hydrostatique}.
\begin{equation}
\begin{array}{ll}
\left .
\begin{array}{lll}
\rm{Adiabatisme :} & dk &\displaystyle{=\frac{dp}{\rho} }\\
& & \\
\rm{Hydrostasie :} & \displaystyle{\frac{dp}{\rho} }&= -g dz
\end{array}
\right \rbrace & \left .
\begin{array}{l}
dk + g dz = 0 \\
\end{array} \right .
\end{array}
\end{equation}
{| border="1" style="border-collapse:collapse"
| Energie statique humide :
| $$h=[(1-q_t)C_{pd}+q_tC_l]T + L_v q_v - L_f q_i + gz$$
|-
| Energie statique avec eau liquide :
| $$h_w=[(1-q_t)C_{pd}+q_tC_{pv}]T - L_vq_l - L_s q_i + gz$$
|-
| Energie statique sans nom :
| $$h_i=[(1-q_t) C_{pd} + q_t C_i] T+ L_s q_v + L_f q_l + gz$$
|-
| Energie statique sèche :
| $$h_d=[(1-q)C_{pd}+qC_{pv}]T +gz$$ <br />
(= $$h_w$$ avec $$q_l\;=\;0$$ et $$q_i\;=\;0$$)
|}
[[Category:Physique]]
2f78fbe2be30b28c1e6f7cccf5012982ec613bfb
101
75
2021-01-25T21:19:48Z
Lfairhead
1
wikitext
text/x-wiki
$$\newcommand{\Condl}{Conditions aux limites }
\newcommand{\condl}{conditions aux limites }
\newcommand{\cad}{c'est-\`a-dire }
\newcommand{\Cad}{C'est-\`a-dire }
\newcommand{\tem}{temp\'erature }
\newcommand{\tems}{temp\'eratures }
\newcommand{\Tpni}{T_{\text{p,ni}}}
\newcommand{\Tp}{T_{\text{p}}}
\newcommand{\qpni}{q_{\text{p,ni}}}
\newcommand{\qp}{q_{\text{p}}}
\newcommand{\qsati}{q_{\text{sat,i}}}
\newcommand{\qsat}{q_{\text{sat}}}
\newcommand{\hpni}{h_{\text{p,ni}}}
\newcommand{\hp}{h_{\text{p}}}
%*KEEP,mathwake,T=LATEX.
\newcommand{\nab}{\vec{\nabla}}
\newcommand{\V}{\vec{V}}
\newcommand{\Vt}{\vec{\tilde{V}}}
\newcommand{\F}{\vec{F}}
\newcommand{\NF}{\|\vec{F}\|}
\newcommand{\CD}{C_D}
\newcommand{\pt}{\tilde{p}}
\newcommand{\Dt}{\tilde{D}}
\newcommand{\thetat}{\tilde{\theta}}
\newcommand{\alphat}{\tilde{\alpha}}
\newcommand{\Mt}{\tilde{M}}
\newcommand{\rhot}{\tilde{\rho}}
\newcommand{\qt}{\tilde{q}}
\newcommand{\Tt}{\tilde{T}}
\newcommand{\wt}{\tilde{w}}
\newcommand{\wbar}{\overline{w}}
\newcommand{\ubar}{\overline{u}}
\newcommand{\vbar}{\overline{v}}
\newcommand{\qbar}{\overline{q_v}}
\newcommand{\omgb}{\overline{\omega}}
\newcommand{\omgwb}{\overline{\omega_w}}
\newcommand{\omgub}{\overline{\omega_u}}
\newcommand{\omgxb}{\overline{\omega_x}}
\newcommand{\thetab}{\overline{\theta}}
\newcommand{\qvb}{\overline{q_v}}
\newcommand{\qvwb}{\overline{q_{vw}}}
\newcommand{\qvxb}{\overline{q_{vx}}}
\newcommand{\qvw}{q_{vw}}
\newcommand{\qvx}{q_{vx}}
\newcommand{\thetawb}{\overline{\theta_w}}
\newcommand{\thetaub}{\overline{\theta_u}}
\newcommand{\thetaxb}{\overline{\theta_x}}
\newcommand{\uwb}{\overline{u_w}}
\newcommand{\uub}{\overline{u_u}}
\newcommand{\uxb}{\overline{u_x}}
\newcommand{\vwb}{\overline{v_w}}
\newcommand{\vub}{\overline{v_u}}
\newcommand{\vxb}{\overline{v_x}}
\newcommand{\vwhat}{\hat{v_w}}
\newcommand{\vuhat}{\hat{v_u}}
\newcommand{\vxhat}{\hat{v_x}}
\newcommand{\Kb}{\overline{K}}
\newcommand{\alphab}{\overline{\alpha}}
\newcommand{\alphawb}{\overline{\alpha_w}}
\newcommand{\alphaub}{\overline{\alpha_u}}
\newcommand{\alphaxb}{\overline{\alpha_x}}
\newcommand{\rhob}{\overline{\rho}}
\newcommand{\sigw}{\ensuremath{\sigma_w}}
\newcommand{\dlt}{\delta t}
\newcommand{\Xrz}{X_{r}}
\newcommand{\Xr}[1]{X_{r(#1)}}
\newcommand{\Xrpz}{X_{rp}}
\newcommand{\Xrp}[1]{X_{rp(#1)}}
\newcommand{\Xrvz}{X_{rv}}
\newcommand{\Xrv}[1]{X_{rv(#1)}}
\newcommand{\Xrhz}{\hat{X}_{r}}
\newcommand{\Xrh}[1]{\hat{X}_{r(#1)}}
%%%\newcommand{\dlts2}{\frac{\dlt}{2}}
\newcommand{\dsdlt}{\frac{2}{\dlt}}
\newcommand{\vphi}{\vec{\varphi}}
\newcommand{\veta}{\vec{\eta}}
\newcommand{\vtheta}{\vec{\theta}}
\newcommand{\veps}{\vec{\varepsilon}}
\newcommand{\delphi}{\vec{\delta \varphi}}
\newcommand{\vG}{\vec{G}}
\newcommand{\vf}{\vec{f}}
\newcommand{\n}{\vec{n}}
\newcommand{\rl}{\rho_{l}}
\newcommand{\rv}{\rho_{v}}
\newcommand{\vv}{\vec{V}_{v}}
\newcommand{\vl}{\vec{V}_{l}}
%%%\newcommand{\v}{\vec{V}}
\newcommand{\g}{\vec{g}}
\newcommand{\dsdt}{\frac {\partial }{\partial t}}
\newcommand{\dst}{\partial_t}
\newcommand{\dsp}{\partial_p}
\newcommand{\dsz}{\partial_z}
\newcommand{\dsy}{\partial_y}
\newcommand{\dsx}{\partial_x}
\newcommand{\dsth}{\partial_{\theta}}
\newcommand{\dsq}{\partial_q}
\newcommand{\dsv}{\partial_V}
\newcommand{\dalpha}{\delta \alpha}
\newcommand{\dw}{\delta w}
\newcommand{\dqv}{\delta q_v}
\newcommand{\dtheta}{\delta \theta}
\newcommand{\domg}{\delta \omega}
\newcommand{\domgcv}{\delta \omega^{\text{cv}}}
%%\newcommand{\domgtop}{\delta \omega_{\text{top}}}
\newcommand{\domgtop}{\delta \omega_{w}}
%%\newcommand{\domgupper}{\delta \omega_{\text{upper}}}
\newcommand{\domgupper}{\delta \omega_{h}}
%%\newcommand{\ptop}{p_{\text{top}}}
\newcommand{\ptop}{p_{w}}
%%\newcommand{\pupper}{p_{\text{upper}}}
\newcommand{\pupper}{p_{h}}
%%\newcommand{\htop}{h_{\text{top}}}
\newcommand{\htop}{h_{w}}
%%\newcommand{\hupper}{h_{\text{upper}}}
\newcommand{\hupper}{h_{h}}
\newcommand{\intw}{\int_{\Sigma_w}}
\newcommand{\intu}{\int_{\Sigma_u}}
\newcommand{\intx}{\int_{\Sigma_x}}
\newcommand{\inte}{\int_{\Sigma_e}}
\newcommand{\intp}{\int_{\Sigma'}}
\newcommand{\intgw}{\int_{\Gamma_{w,in}}}
\newcommand{\intgwp}{\int_{\Gamma_{w,in}^+}}
\newcommand{\intgwm}{\int_{\Gamma_{w,in}^-}}
\newcommand{\intg}{\int_{\Gamma}}
\newcommand{\intgp}{\int_{\Gamma'}}
\newcommand{\intgpe}{\int_{\Gamma'_e}}
\newcommand{\intgpu}{\int_{\Gamma'_u}}
\newcommand{\intgpx}{\int_{\Gamma'_x}}
\newcommand{\intgpw}{\int_{\Gamma'_w}}
\newcommand{\kgw}{k_{\text{gw}}}
\newcommand{\taugw}{\tau_{\text{gw}}}
\newcommand{\klift}{k_{\text{lift}}}
%%\newcommand{\kliftw}{k_{\text{lift,wk}}}
\newcommand{\kliftw}{\mathcal{E}_{\text{lift}}^{\text{wk}}}
\newcommand{\Eliftw}{\mathcal{E}_{\text{lift}}^{\text{wk}}}
\newcommand{\Pb}{\ensuremath{P_{\text{buoy}}}}
\newcommand{\Pliftw}{\ensuremath{P_{\text{lift}}^{\text{wk}}}}
\newcommand{\Pliftwh}{\ensuremath{\widehat{P_{\text{lift}}^{\text{wk}}}}}
\newcommand{\Pliftwp}{\ensuremath{\widetilde{P_{\text{lift}}^{\text{wk}}}}}
\newcommand{\LG}{\ensuremath{L_{\Gamma}}}
\newcommand{\LGh}{\ensuremath{\widehat{L_{\Gamma}}}}
\newcommand{\LGp}{\ensuremath{\widetilde{L_{\Gamma}}}}
\newcommand{\LGt}{\ensuremath{\widetilde{L_{\Gamma}}}}
\newcommand{\Dw}{\ensuremath{D_{\text{wk}}}}
\newcommand{\QI}{\ensuremath{Q_1}}
\newcommand{\DQI}{\ensuremath{\delta Q_1}}
\newcommand{\QIsat}{\ensuremath{Q_{1}^{\text{sat}}}}
\newcommand{\QIcvsat}{\ensuremath{Q_{1}^{\text{cv,sat}}}}
\newcommand{\QIunsat}{\ensuremath{Q_{1}^{\text{unsat}}}}
\newcommand{\QIcvunsat}{\ensuremath{Q_{1}^{\text{cv,unsat}}}}
\newcommand{\QIIsat}{\ensuremath{Q_{2}^{\text{sat}}}}
\newcommand{\QIIcvsat}{\ensuremath{Q_{2}^{\text{cv,sat}}}}
\newcommand{\QIIunsat}{\ensuremath{Q_{2}^{\text{unsat}}}}
\newcommand{\QIIcvunsat}{\ensuremath{Q_{2}^{\text{cv,unsat}}}}
\newcommand{\QIw}{\ensuremath{Q_{1,w}}}
\newcommand{\QIcvw}{\ensuremath{Q_{1,w}^{\text{cv}}}}
\newcommand{\QIx}{\ensuremath{Q_{1,x}}}
\newcommand{\QIcvx}{\ensuremath{Q_{1,x}^{\text{cv}}}}
\newcommand{\QIcv}{\ensuremath{Q_{1}^{\text{cv}}}}
\newcommand{\DQIcv}{\ensuremath{\delta Q_{1}^{\text{cv}}}}
\newcommand{\QIbl}{\ensuremath{Q_{1}^{\text{bl}}}}
\newcommand{\QIcl}{\ensuremath{Q_{1}^{\text{cl}}}}
\newcommand{\QIwk}{\ensuremath{Q_{1}^{\text{wk}}}}
\newcommand{\DQIwk}{\ensuremath{\delta Q_{1}^{\text{wk}}}}
\newcommand{\QIp}{\ensuremath{Q_{1,p}}}
\newcommand{\QIS}{\ensuremath{\mathcal{Q}_{1}^S}}
\newcommand{\QID}{\ensuremath{\mathcal{Q}_{1}^D}}
\newcommand{\QIT}{\ensuremath{\mathcal{Q}_{1}^T}}
\newcommand{\QIE}{\ensuremath{\mathcal{Q}_{1}^E}}
\newcommand{\QII}{\ensuremath{Q_2}}
\newcommand{\DQII}{\ensuremath{\delta Q_2}}
\newcommand{\QIIw}{\ensuremath{Q_{2,w}}}
\newcommand{\QIIcvw}{\ensuremath{Q_{2,w}^{\text{cv}}}}
\newcommand{\QIIx}{\ensuremath{Q_{2,x}}}
\newcommand{\QIIcvx}{\ensuremath{Q_{2,x}^{\text{cv}}}}
\newcommand{\QIIcv}{\ensuremath{Q_{2}^{\text{cv}}}}
\newcommand{\DQIIcv}{\ensuremath{\delta Q_{2}^{\text{cv}}}}
\newcommand{\QIIbl}{\ensuremath{Q_{2}^{\text{bl}}}}
\newcommand{\QIIcl}{\ensuremath{Q_{2}^{\text{cl}}}}
\newcommand{\QIIwk}{\ensuremath{Q_{2}^{\text{wk}}}}
\newcommand{\DQIIwk}{\ensuremath{\delta Q_{2}^{\text{wk}}}}
\newcommand{\QIIp}{\ensuremath{Q_{2,p}}}
\newcommand{\QIIS}{\ensuremath{\mathcal{Q}_{2}^S}}
\newcommand{\QIID}{\ensuremath{\mathcal{Q}_{2}^D}}
\newcommand{\QIIT}{\ensuremath{\mathcal{Q}_{2}^T}}
\newcommand{\QIIE}{\ensuremath{\mathcal{Q}_{2}^E}}
\newcommand{\Sig}{\ensuremath{\Sigma\;}}
\newcommand{\Sigp}{\ensuremath{\Sigma'\;}}
\newcommand{\Sigw}{\ensuremath{\Sigma_w\;}}
\newcommand{\Sige}{\ensuremath{\Sigma_e}}
\newcommand{\Sigu}{\ensuremath{\Sigma_u}}
\newcommand{\Sigx}{\ensuremath{\Sigma_x}}
\newcommand{\Wb}{\ensuremath{W_{\text{buoy}}}}
\newcommand{\Wbb}{\bar{\bar{W}}}
\newcommand{\wa}{\langle w\rangle}
\newcommand{\wpa}{\langle w'\rangle}
\newcommand{\wwa}{\langle w^2\rangle}
\newcommand{\wwwa}{\langle w^3\rangle}
\newcommand{\wwpa}{\langle w^{\prime\prime\prime 2}\rangle}$$
Le but de cette note est d'établir les formules menant à la détermination des quantités
d'eau condensées sous forme d'eau liquide et de glace dans le sous-programme Fisrtilp. La
principale difficulté réside dans le fait que la condensation dégage de la chaleur latente
et que $$\qsat$$ dépend de la température. Dans tous ces calculs, on considère une couche
atmosphérique sans condensat de température $$T$$ et d'humidité spécifique $$q$$ et on se
donne la fraction $$f$$ de la maille où se produit la condensation. Le principe est d'écrire
que l'énergie statique humide et la quantité d'eau totale sont conservées dans le
processus de condensation.
Dans la première version créée par Laurent Li, on suppose que seule la partie
nuageuse de la maille voit sa température augmenter du fait de la condensation. Alors le
système que l'on décrit présente des températures différentes dans le nuage et hors du
nuage.
Laurent Li résoud :
\begin{equation}
C_p T' \;+\; L_v \qsat(T') \;=\; C_p T \;+\; L_v q
\label{eq.init}
\end{equation}
étant entendu que cela s'applique à la partie nuageuse de la maille.
Nous voulons, au contraire, écrire que les températures sont toujours uniformisées
horizontalement très rapidement (et même on va supposer instantanément). En outre nous
allons généraliser les calculs au cas où de la condensation solide est présente et nous
allons profiter de l'occasion pour écrire des formules complètes prenant en compte la
variation des chaleurs latentes avec la température (voir dans l'annexe les formules donnant
l'énergie statique humide $$h$$).
== Écriture des équations de conservation ==
Soit donc $$f$$ la fraction nuageuse. On écrit que sur $$f$$ il y a condensation et que sur
$$(1-f)$$ il n'y a pas de changement de phase. On suppose connu le contenu massique total
d'eau $$q_n$$ (i.e. vapeur + liquide + glace) dans le nuage. En désignant par $$T'$$ la
température (uniforme) après condensation et par $$q"$$ l'humidité spécifique hors des
nuages, les énergies statiques massiques initiale $$h$$, dans le nuage $$h_n$$ et hors du
nuage $$h"$$ s'écrivent~:
\begin{equation}
\left \lbrace
\begin{array}{ll}
h_n &=\;[(1-q_n)C_{pd} + q_n C_l] T' + L_v \qsat - L_f q_i + gz \\
h" &=\;[(1-q")C_{pd} + q"C_l] T' + L_v q" + gz \\
h &=\;[(1-q)C_{pd} + q C_l] T + L_v q + gz \\
\end{array}
\right .
\end{equation}
où $$\qsat$$ désigne l'humidité saturante. Ce peut être l'humidité saturante à la
température $$T'$$ sur l'eau liquide ou sur la glace. A voir plus loin.
La conservation de l'énergie statique humide et de l'eau s'écrit~:
\begin{equation}
\left \lbrace
\begin{array}{ll}
f h_n + (1-f)h" &=\;h \\
f q_n + (1-f)q" &=\;q \\
\end{array}
\right .
\end{equation}
Ce qui donne~:
\begin{equation}
\left \lbrace
\begin{array}{l}
T'[C_{pd} + (f q_n + (1-f) q") (C_l-C_{pd})] + L_v [f \qsat + (1-f)q"] - L_f f q_i \\
\qquad \qquad = [C_{pd} + q (C_l-C_{pd})] T + L_v q \\
\\
q = f q_n + (1-f) q"\\
\end{array}
\right .
\end{equation}
Soit, en posant $$C_p = C_{pd} + (C_l-C_{pd}) q$$~:
\begin{equation}
\left \lbrace
\begin{array}{l}
C_p T' - f [L_v(q_n-\qsat) + L_f q_i] = C_p T \\
q = f q_n + (1-f) q"\\
\end{array}
\right .
\end{equation}
Maintenant nous supposons que la glace représente une fraction $$\gamma$$ du condensat~:
$$q_i = \gamma (q_n - \qsat)$$. Finalement les équations de conservation s'écrivent~:
\begin{equation}
\label{eq.conserv_fin}
\left \lbrace
\begin{array}{l}
C_p T' - f (L_v+\gamma L_f)(q_n-\qsat) = C_p T \\
q = f q_n + (1-f) q"\\
\end{array}
\right .
\end{equation}
== Mise en oeuvre ==
Nous supposons maintenant que $$\qsat$$ est égale à l'humidité saturante sur eau liquide
lorsqu'il n'y a pas de glace et à l'humidité saturante sur glace dès que la glace est
présente.
L'équation (\ref{eq.conserv_fin}) pour la température peut être écrite sous une forme
analogue à l'équation initiale (\ref{eq.init}) de Laurent Li~:
\begin{equation}
\label{eq.conserv_fin_lli}
C_p T' \;+\; f (L_v+\gamma L_f) \qsat(T')] \;=\; C_p T \;+\; f (L_v+\gamma L_f) q_n
\end{equation}
On constate que l'on passe de l'équation (\ref{eq.init}) à l'équation
(\ref{eq.conserv_fin_lli}) en remplaçant $$L_v$$ par $$f (L_v+\gamma L_f)$$ et $$q$$ par $$q_n$$.
L'itération convergeant vers $$T'$$ s'obtient ainsi directement à partir des formules de
Laurent~:
\begin{equation}
\displaystyle{
T'_{j+1}\;=\;T'_j\;+\;\frac{T-T'_j\;+\;\frac{f (L_v+\gamma L_f)}{C_p}[q_n\;-\;\qsat(T'_j)]}
{1\;+\;\frac{f (L_v+\gamma L_f)}{C_p}\partial_T\qsat(T'_j)} }
\label{eq.iter}
\end{equation}
L'expérience montre que cette itération converge assez vite, en 3 ou 4 passages. Elle va
fournir une valeur approchée $$T'_a$$ à partir de laquelle on peut calculer l'eau condensée~:
$$
c\;=\;f[q_n\;-\;\qsat(T'_a)]
$$
et les estimations finales de la température $$T'$$ et de l'humidité $$q'$$ telles que
l'énergie et l'eau soient exactement conservées~:
\begin{equation}
\left \lbrace
\begin{array}{l}
T'\;=\; T\;+\;\frac{L_v+\gamma L_f}{C_p}c \\
q'\;=\;q\;-\;c \\
\end{array}
\right .
\end{equation}
== Annexe: définitions des enthalpies et énergies statiques massiques ==
=== I - Enthalpies massiques: ===
Grandeurs conservées dans les \underline{transformations adiabatiques
isobares}.
\begin{equation}
\begin{array}{ll}
\left \lbrace
\begin{array}{lll}
k &=& (1-q_t) k_d + q_v k_v + q_l k_l + q_i k_i \\
L_v(T) &=& k_v - k_l \\
L_s(T) &=& k_v - k_i\;, \quad L_f(T) = L_s(T)-L_v(T)\\
k_d &=& C_{pd} T \\
k_l &=& C_l T \\
k_i &=& C_i T \\
\end{array}
\right \rbrace & \left .
\begin{array}{l}
\rm{enthalpie} \\
k=[(1-q_t) C_{pd} +q_t C_l] T + L_v q_v - L_f q_i\\
\end{array} \right .
\end{array}
\end{equation}
Comme $$L_v-(C_{pv}-C_l)T = \rm{cste}$$,
l'enthalpie avec eau liquide $$k_w=k-q_t[L_v-(C_{pv}-C_l)T]$$
est aussi conservée dans les transformations adiabatiques isobares~:
$$
k_w = [(1-q_t) C_{pd} + q_t C_{pv}] T - L_v q_l - L_s q_i
$$
On peut faire le même genre de chose pour obtenir une expression sans $$q_i$$,
ce qui donne~: et comme $$L_f-(C_l-C_i)T = \rm{cste}$$, l'enthalpie (sans nom)
$$k_i=k-q_t[L_f-(C_l-C_i)T]$$ est aussi conservée dans les transformations
adiabatiques isobares~:
$$
k_i = [(1-q_t) C_{pd} + q_t C_i] T+ L_s q_v + L_f q_l
$$
=== II - Energies statiques: ===
Grandeurs conservées dans les \\
\underline{transformations adiabatiques où le changement
de pression est purement hydrostatique}.
\begin{equation}
\begin{array}{ll}
\left .
\begin{array}{lll}
\rm{Adiabatisme :} & dk &\displaystyle{=\frac{dp}{\rho} }\\
& & \\
\rm{Hydrostasie :} & \displaystyle{\frac{dp}{\rho} }&= -g dz
\end{array}
\right \rbrace & \left .
\begin{array}{l}
dk + g dz = 0 \\
\end{array} \right .
\end{array}
\end{equation}
{| border="1" style="border-collapse:collapse"
| Energie statique humide :
| $$h=[(1-q_t)C_{pd}+q_tC_l]T + L_v q_v - L_f q_i + gz$$
|-
| Energie statique avec eau liquide :
| $$h_w=[(1-q_t)C_{pd}+q_tC_{pv}]T - L_vq_l - L_s q_i + gz$$
|-
| Energie statique sans nom :
| $$h_i=[(1-q_t) C_{pd} + q_t C_i] T+ L_s q_v + L_f q_l + gz$$
|-
| Energie statique sèche :
| $$h_d=[(1-q)C_{pd}+qC_{pv}]T +gz$$ <br />
(= $$h_w$$ avec $$q_l\;=\;0$$ et $$q_i\;=\;0$$)
|}
[[Category:Physique]]
[[Category:Notes Techniques]]
4973a0e776cdd04db79d4ba623b7678c35fcc310
103
101
2021-02-01T11:08:42Z
Lfairhead
1
/* II - Energies statiques: */
wikitext
text/x-wiki
$$\newcommand{\Condl}{Conditions aux limites }
\newcommand{\condl}{conditions aux limites }
\newcommand{\cad}{c'est-\`a-dire }
\newcommand{\Cad}{C'est-\`a-dire }
\newcommand{\tem}{temp\'erature }
\newcommand{\tems}{temp\'eratures }
\newcommand{\Tpni}{T_{\text{p,ni}}}
\newcommand{\Tp}{T_{\text{p}}}
\newcommand{\qpni}{q_{\text{p,ni}}}
\newcommand{\qp}{q_{\text{p}}}
\newcommand{\qsati}{q_{\text{sat,i}}}
\newcommand{\qsat}{q_{\text{sat}}}
\newcommand{\hpni}{h_{\text{p,ni}}}
\newcommand{\hp}{h_{\text{p}}}
%*KEEP,mathwake,T=LATEX.
\newcommand{\nab}{\vec{\nabla}}
\newcommand{\V}{\vec{V}}
\newcommand{\Vt}{\vec{\tilde{V}}}
\newcommand{\F}{\vec{F}}
\newcommand{\NF}{\|\vec{F}\|}
\newcommand{\CD}{C_D}
\newcommand{\pt}{\tilde{p}}
\newcommand{\Dt}{\tilde{D}}
\newcommand{\thetat}{\tilde{\theta}}
\newcommand{\alphat}{\tilde{\alpha}}
\newcommand{\Mt}{\tilde{M}}
\newcommand{\rhot}{\tilde{\rho}}
\newcommand{\qt}{\tilde{q}}
\newcommand{\Tt}{\tilde{T}}
\newcommand{\wt}{\tilde{w}}
\newcommand{\wbar}{\overline{w}}
\newcommand{\ubar}{\overline{u}}
\newcommand{\vbar}{\overline{v}}
\newcommand{\qbar}{\overline{q_v}}
\newcommand{\omgb}{\overline{\omega}}
\newcommand{\omgwb}{\overline{\omega_w}}
\newcommand{\omgub}{\overline{\omega_u}}
\newcommand{\omgxb}{\overline{\omega_x}}
\newcommand{\thetab}{\overline{\theta}}
\newcommand{\qvb}{\overline{q_v}}
\newcommand{\qvwb}{\overline{q_{vw}}}
\newcommand{\qvxb}{\overline{q_{vx}}}
\newcommand{\qvw}{q_{vw}}
\newcommand{\qvx}{q_{vx}}
\newcommand{\thetawb}{\overline{\theta_w}}
\newcommand{\thetaub}{\overline{\theta_u}}
\newcommand{\thetaxb}{\overline{\theta_x}}
\newcommand{\uwb}{\overline{u_w}}
\newcommand{\uub}{\overline{u_u}}
\newcommand{\uxb}{\overline{u_x}}
\newcommand{\vwb}{\overline{v_w}}
\newcommand{\vub}{\overline{v_u}}
\newcommand{\vxb}{\overline{v_x}}
\newcommand{\vwhat}{\hat{v_w}}
\newcommand{\vuhat}{\hat{v_u}}
\newcommand{\vxhat}{\hat{v_x}}
\newcommand{\Kb}{\overline{K}}
\newcommand{\alphab}{\overline{\alpha}}
\newcommand{\alphawb}{\overline{\alpha_w}}
\newcommand{\alphaub}{\overline{\alpha_u}}
\newcommand{\alphaxb}{\overline{\alpha_x}}
\newcommand{\rhob}{\overline{\rho}}
\newcommand{\sigw}{\ensuremath{\sigma_w}}
\newcommand{\dlt}{\delta t}
\newcommand{\Xrz}{X_{r}}
\newcommand{\Xr}[1]{X_{r(#1)}}
\newcommand{\Xrpz}{X_{rp}}
\newcommand{\Xrp}[1]{X_{rp(#1)}}
\newcommand{\Xrvz}{X_{rv}}
\newcommand{\Xrv}[1]{X_{rv(#1)}}
\newcommand{\Xrhz}{\hat{X}_{r}}
\newcommand{\Xrh}[1]{\hat{X}_{r(#1)}}
%%%\newcommand{\dlts2}{\frac{\dlt}{2}}
\newcommand{\dsdlt}{\frac{2}{\dlt}}
\newcommand{\vphi}{\vec{\varphi}}
\newcommand{\veta}{\vec{\eta}}
\newcommand{\vtheta}{\vec{\theta}}
\newcommand{\veps}{\vec{\varepsilon}}
\newcommand{\delphi}{\vec{\delta \varphi}}
\newcommand{\vG}{\vec{G}}
\newcommand{\vf}{\vec{f}}
\newcommand{\n}{\vec{n}}
\newcommand{\rl}{\rho_{l}}
\newcommand{\rv}{\rho_{v}}
\newcommand{\vv}{\vec{V}_{v}}
\newcommand{\vl}{\vec{V}_{l}}
%%%\newcommand{\v}{\vec{V}}
\newcommand{\g}{\vec{g}}
\newcommand{\dsdt}{\frac {\partial }{\partial t}}
\newcommand{\dst}{\partial_t}
\newcommand{\dsp}{\partial_p}
\newcommand{\dsz}{\partial_z}
\newcommand{\dsy}{\partial_y}
\newcommand{\dsx}{\partial_x}
\newcommand{\dsth}{\partial_{\theta}}
\newcommand{\dsq}{\partial_q}
\newcommand{\dsv}{\partial_V}
\newcommand{\dalpha}{\delta \alpha}
\newcommand{\dw}{\delta w}
\newcommand{\dqv}{\delta q_v}
\newcommand{\dtheta}{\delta \theta}
\newcommand{\domg}{\delta \omega}
\newcommand{\domgcv}{\delta \omega^{\text{cv}}}
%%\newcommand{\domgtop}{\delta \omega_{\text{top}}}
\newcommand{\domgtop}{\delta \omega_{w}}
%%\newcommand{\domgupper}{\delta \omega_{\text{upper}}}
\newcommand{\domgupper}{\delta \omega_{h}}
%%\newcommand{\ptop}{p_{\text{top}}}
\newcommand{\ptop}{p_{w}}
%%\newcommand{\pupper}{p_{\text{upper}}}
\newcommand{\pupper}{p_{h}}
%%\newcommand{\htop}{h_{\text{top}}}
\newcommand{\htop}{h_{w}}
%%\newcommand{\hupper}{h_{\text{upper}}}
\newcommand{\hupper}{h_{h}}
\newcommand{\intw}{\int_{\Sigma_w}}
\newcommand{\intu}{\int_{\Sigma_u}}
\newcommand{\intx}{\int_{\Sigma_x}}
\newcommand{\inte}{\int_{\Sigma_e}}
\newcommand{\intp}{\int_{\Sigma'}}
\newcommand{\intgw}{\int_{\Gamma_{w,in}}}
\newcommand{\intgwp}{\int_{\Gamma_{w,in}^+}}
\newcommand{\intgwm}{\int_{\Gamma_{w,in}^-}}
\newcommand{\intg}{\int_{\Gamma}}
\newcommand{\intgp}{\int_{\Gamma'}}
\newcommand{\intgpe}{\int_{\Gamma'_e}}
\newcommand{\intgpu}{\int_{\Gamma'_u}}
\newcommand{\intgpx}{\int_{\Gamma'_x}}
\newcommand{\intgpw}{\int_{\Gamma'_w}}
\newcommand{\kgw}{k_{\text{gw}}}
\newcommand{\taugw}{\tau_{\text{gw}}}
\newcommand{\klift}{k_{\text{lift}}}
%%\newcommand{\kliftw}{k_{\text{lift,wk}}}
\newcommand{\kliftw}{\mathcal{E}_{\text{lift}}^{\text{wk}}}
\newcommand{\Eliftw}{\mathcal{E}_{\text{lift}}^{\text{wk}}}
\newcommand{\Pb}{\ensuremath{P_{\text{buoy}}}}
\newcommand{\Pliftw}{\ensuremath{P_{\text{lift}}^{\text{wk}}}}
\newcommand{\Pliftwh}{\ensuremath{\widehat{P_{\text{lift}}^{\text{wk}}}}}
\newcommand{\Pliftwp}{\ensuremath{\widetilde{P_{\text{lift}}^{\text{wk}}}}}
\newcommand{\LG}{\ensuremath{L_{\Gamma}}}
\newcommand{\LGh}{\ensuremath{\widehat{L_{\Gamma}}}}
\newcommand{\LGp}{\ensuremath{\widetilde{L_{\Gamma}}}}
\newcommand{\LGt}{\ensuremath{\widetilde{L_{\Gamma}}}}
\newcommand{\Dw}{\ensuremath{D_{\text{wk}}}}
\newcommand{\QI}{\ensuremath{Q_1}}
\newcommand{\DQI}{\ensuremath{\delta Q_1}}
\newcommand{\QIsat}{\ensuremath{Q_{1}^{\text{sat}}}}
\newcommand{\QIcvsat}{\ensuremath{Q_{1}^{\text{cv,sat}}}}
\newcommand{\QIunsat}{\ensuremath{Q_{1}^{\text{unsat}}}}
\newcommand{\QIcvunsat}{\ensuremath{Q_{1}^{\text{cv,unsat}}}}
\newcommand{\QIIsat}{\ensuremath{Q_{2}^{\text{sat}}}}
\newcommand{\QIIcvsat}{\ensuremath{Q_{2}^{\text{cv,sat}}}}
\newcommand{\QIIunsat}{\ensuremath{Q_{2}^{\text{unsat}}}}
\newcommand{\QIIcvunsat}{\ensuremath{Q_{2}^{\text{cv,unsat}}}}
\newcommand{\QIw}{\ensuremath{Q_{1,w}}}
\newcommand{\QIcvw}{\ensuremath{Q_{1,w}^{\text{cv}}}}
\newcommand{\QIx}{\ensuremath{Q_{1,x}}}
\newcommand{\QIcvx}{\ensuremath{Q_{1,x}^{\text{cv}}}}
\newcommand{\QIcv}{\ensuremath{Q_{1}^{\text{cv}}}}
\newcommand{\DQIcv}{\ensuremath{\delta Q_{1}^{\text{cv}}}}
\newcommand{\QIbl}{\ensuremath{Q_{1}^{\text{bl}}}}
\newcommand{\QIcl}{\ensuremath{Q_{1}^{\text{cl}}}}
\newcommand{\QIwk}{\ensuremath{Q_{1}^{\text{wk}}}}
\newcommand{\DQIwk}{\ensuremath{\delta Q_{1}^{\text{wk}}}}
\newcommand{\QIp}{\ensuremath{Q_{1,p}}}
\newcommand{\QIS}{\ensuremath{\mathcal{Q}_{1}^S}}
\newcommand{\QID}{\ensuremath{\mathcal{Q}_{1}^D}}
\newcommand{\QIT}{\ensuremath{\mathcal{Q}_{1}^T}}
\newcommand{\QIE}{\ensuremath{\mathcal{Q}_{1}^E}}
\newcommand{\QII}{\ensuremath{Q_2}}
\newcommand{\DQII}{\ensuremath{\delta Q_2}}
\newcommand{\QIIw}{\ensuremath{Q_{2,w}}}
\newcommand{\QIIcvw}{\ensuremath{Q_{2,w}^{\text{cv}}}}
\newcommand{\QIIx}{\ensuremath{Q_{2,x}}}
\newcommand{\QIIcvx}{\ensuremath{Q_{2,x}^{\text{cv}}}}
\newcommand{\QIIcv}{\ensuremath{Q_{2}^{\text{cv}}}}
\newcommand{\DQIIcv}{\ensuremath{\delta Q_{2}^{\text{cv}}}}
\newcommand{\QIIbl}{\ensuremath{Q_{2}^{\text{bl}}}}
\newcommand{\QIIcl}{\ensuremath{Q_{2}^{\text{cl}}}}
\newcommand{\QIIwk}{\ensuremath{Q_{2}^{\text{wk}}}}
\newcommand{\DQIIwk}{\ensuremath{\delta Q_{2}^{\text{wk}}}}
\newcommand{\QIIp}{\ensuremath{Q_{2,p}}}
\newcommand{\QIIS}{\ensuremath{\mathcal{Q}_{2}^S}}
\newcommand{\QIID}{\ensuremath{\mathcal{Q}_{2}^D}}
\newcommand{\QIIT}{\ensuremath{\mathcal{Q}_{2}^T}}
\newcommand{\QIIE}{\ensuremath{\mathcal{Q}_{2}^E}}
\newcommand{\Sig}{\ensuremath{\Sigma\;}}
\newcommand{\Sigp}{\ensuremath{\Sigma'\;}}
\newcommand{\Sigw}{\ensuremath{\Sigma_w\;}}
\newcommand{\Sige}{\ensuremath{\Sigma_e}}
\newcommand{\Sigu}{\ensuremath{\Sigma_u}}
\newcommand{\Sigx}{\ensuremath{\Sigma_x}}
\newcommand{\Wb}{\ensuremath{W_{\text{buoy}}}}
\newcommand{\Wbb}{\bar{\bar{W}}}
\newcommand{\wa}{\langle w\rangle}
\newcommand{\wpa}{\langle w'\rangle}
\newcommand{\wwa}{\langle w^2\rangle}
\newcommand{\wwwa}{\langle w^3\rangle}
\newcommand{\wwpa}{\langle w^{\prime\prime\prime 2}\rangle}$$
Le but de cette note est d'établir les formules menant à la détermination des quantités
d'eau condensées sous forme d'eau liquide et de glace dans le sous-programme Fisrtilp. La
principale difficulté réside dans le fait que la condensation dégage de la chaleur latente
et que $$\qsat$$ dépend de la température. Dans tous ces calculs, on considère une couche
atmosphérique sans condensat de température $$T$$ et d'humidité spécifique $$q$$ et on se
donne la fraction $$f$$ de la maille où se produit la condensation. Le principe est d'écrire
que l'énergie statique humide et la quantité d'eau totale sont conservées dans le
processus de condensation.
Dans la première version créée par Laurent Li, on suppose que seule la partie
nuageuse de la maille voit sa température augmenter du fait de la condensation. Alors le
système que l'on décrit présente des températures différentes dans le nuage et hors du
nuage.
Laurent Li résoud :
\begin{equation}
C_p T' \;+\; L_v \qsat(T') \;=\; C_p T \;+\; L_v q
\label{eq.init}
\end{equation}
étant entendu que cela s'applique à la partie nuageuse de la maille.
Nous voulons, au contraire, écrire que les températures sont toujours uniformisées
horizontalement très rapidement (et même on va supposer instantanément). En outre nous
allons généraliser les calculs au cas où de la condensation solide est présente et nous
allons profiter de l'occasion pour écrire des formules complètes prenant en compte la
variation des chaleurs latentes avec la température (voir dans l'annexe les formules donnant
l'énergie statique humide $$h$$).
== Écriture des équations de conservation ==
Soit donc $$f$$ la fraction nuageuse. On écrit que sur $$f$$ il y a condensation et que sur
$$(1-f)$$ il n'y a pas de changement de phase. On suppose connu le contenu massique total
d'eau $$q_n$$ (i.e. vapeur + liquide + glace) dans le nuage. En désignant par $$T'$$ la
température (uniforme) après condensation et par $$q"$$ l'humidité spécifique hors des
nuages, les énergies statiques massiques initiale $$h$$, dans le nuage $$h_n$$ et hors du
nuage $$h"$$ s'écrivent~:
\begin{equation}
\left \lbrace
\begin{array}{ll}
h_n &=\;[(1-q_n)C_{pd} + q_n C_l] T' + L_v \qsat - L_f q_i + gz \\
h" &=\;[(1-q")C_{pd} + q"C_l] T' + L_v q" + gz \\
h &=\;[(1-q)C_{pd} + q C_l] T + L_v q + gz \\
\end{array}
\right .
\end{equation}
où $$\qsat$$ désigne l'humidité saturante. Ce peut être l'humidité saturante à la
température $$T'$$ sur l'eau liquide ou sur la glace. A voir plus loin.
La conservation de l'énergie statique humide et de l'eau s'écrit~:
\begin{equation}
\left \lbrace
\begin{array}{ll}
f h_n + (1-f)h" &=\;h \\
f q_n + (1-f)q" &=\;q \\
\end{array}
\right .
\end{equation}
Ce qui donne~:
\begin{equation}
\left \lbrace
\begin{array}{l}
T'[C_{pd} + (f q_n + (1-f) q") (C_l-C_{pd})] + L_v [f \qsat + (1-f)q"] - L_f f q_i \\
\qquad \qquad = [C_{pd} + q (C_l-C_{pd})] T + L_v q \\
\\
q = f q_n + (1-f) q"\\
\end{array}
\right .
\end{equation}
Soit, en posant $$C_p = C_{pd} + (C_l-C_{pd}) q$$~:
\begin{equation}
\left \lbrace
\begin{array}{l}
C_p T' - f [L_v(q_n-\qsat) + L_f q_i] = C_p T \\
q = f q_n + (1-f) q"\\
\end{array}
\right .
\end{equation}
Maintenant nous supposons que la glace représente une fraction $$\gamma$$ du condensat~:
$$q_i = \gamma (q_n - \qsat)$$. Finalement les équations de conservation s'écrivent~:
\begin{equation}
\label{eq.conserv_fin}
\left \lbrace
\begin{array}{l}
C_p T' - f (L_v+\gamma L_f)(q_n-\qsat) = C_p T \\
q = f q_n + (1-f) q"\\
\end{array}
\right .
\end{equation}
== Mise en oeuvre ==
Nous supposons maintenant que $$\qsat$$ est égale à l'humidité saturante sur eau liquide
lorsqu'il n'y a pas de glace et à l'humidité saturante sur glace dès que la glace est
présente.
L'équation (\ref{eq.conserv_fin}) pour la température peut être écrite sous une forme
analogue à l'équation initiale (\ref{eq.init}) de Laurent Li~:
\begin{equation}
\label{eq.conserv_fin_lli}
C_p T' \;+\; f (L_v+\gamma L_f) \qsat(T')] \;=\; C_p T \;+\; f (L_v+\gamma L_f) q_n
\end{equation}
On constate que l'on passe de l'équation (\ref{eq.init}) à l'équation
(\ref{eq.conserv_fin_lli}) en remplaçant $$L_v$$ par $$f (L_v+\gamma L_f)$$ et $$q$$ par $$q_n$$.
L'itération convergeant vers $$T'$$ s'obtient ainsi directement à partir des formules de
Laurent~:
\begin{equation}
\displaystyle{
T'_{j+1}\;=\;T'_j\;+\;\frac{T-T'_j\;+\;\frac{f (L_v+\gamma L_f)}{C_p}[q_n\;-\;\qsat(T'_j)]}
{1\;+\;\frac{f (L_v+\gamma L_f)}{C_p}\partial_T\qsat(T'_j)} }
\label{eq.iter}
\end{equation}
L'expérience montre que cette itération converge assez vite, en 3 ou 4 passages. Elle va
fournir une valeur approchée $$T'_a$$ à partir de laquelle on peut calculer l'eau condensée~:
$$
c\;=\;f[q_n\;-\;\qsat(T'_a)]
$$
et les estimations finales de la température $$T'$$ et de l'humidité $$q'$$ telles que
l'énergie et l'eau soient exactement conservées~:
\begin{equation}
\left \lbrace
\begin{array}{l}
T'\;=\; T\;+\;\frac{L_v+\gamma L_f}{C_p}c \\
q'\;=\;q\;-\;c \\
\end{array}
\right .
\end{equation}
== Annexe: définitions des enthalpies et énergies statiques massiques ==
=== I - Enthalpies massiques: ===
Grandeurs conservées dans les \underline{transformations adiabatiques
isobares}.
\begin{equation}
\begin{array}{ll}
\left \lbrace
\begin{array}{lll}
k &=& (1-q_t) k_d + q_v k_v + q_l k_l + q_i k_i \\
L_v(T) &=& k_v - k_l \\
L_s(T) &=& k_v - k_i\;, \quad L_f(T) = L_s(T)-L_v(T)\\
k_d &=& C_{pd} T \\
k_l &=& C_l T \\
k_i &=& C_i T \\
\end{array}
\right \rbrace & \left .
\begin{array}{l}
\rm{enthalpie} \\
k=[(1-q_t) C_{pd} +q_t C_l] T + L_v q_v - L_f q_i\\
\end{array} \right .
\end{array}
\end{equation}
Comme $$L_v-(C_{pv}-C_l)T = \rm{cste}$$,
l'enthalpie avec eau liquide $$k_w=k-q_t[L_v-(C_{pv}-C_l)T]$$
est aussi conservée dans les transformations adiabatiques isobares~:
$$
k_w = [(1-q_t) C_{pd} + q_t C_{pv}] T - L_v q_l - L_s q_i
$$
On peut faire le même genre de chose pour obtenir une expression sans $$q_i$$,
ce qui donne~: et comme $$L_f-(C_l-C_i)T = \rm{cste}$$, l'enthalpie (sans nom)
$$k_i=k-q_t[L_f-(C_l-C_i)T]$$ est aussi conservée dans les transformations
adiabatiques isobares~:
$$
k_i = [(1-q_t) C_{pd} + q_t C_i] T+ L_s q_v + L_f q_l
$$
=== II - Energies statiques: ===
Grandeurs conservées dans les
\underline{transformations adiabatiques où le changement
de pression est purement hydrostatique}.
\begin{equation}
\begin{array}{ll}
\left .
\begin{array}{lll}
\rm{Adiabatisme :} & dk &\displaystyle{=\frac{dp}{\rho} }\\
& & \\
\rm{Hydrostasie :} & \displaystyle{\frac{dp}{\rho} }&= -g dz
\end{array}
\right \rbrace & \left .
\begin{array}{l}
dk + g dz = 0 \\
\end{array} \right .
\end{array}
\end{equation}
{| border="1" style="border-collapse:collapse"
| Energie statique humide :
| $$h=[(1-q_t)C_{pd}+q_tC_l]T + L_v q_v - L_f q_i + gz$$
|-
| Energie statique avec eau liquide :
| $$h_w=[(1-q_t)C_{pd}+q_tC_{pv}]T - L_vq_l - L_s q_i + gz$$
|-
| Energie statique sans nom :
| $$h_i=[(1-q_t) C_{pd} + q_t C_i] T+ L_s q_v + L_f q_l + gz$$
|-
| Energie statique sèche :
| $$h_d=[(1-q)C_{pd}+qC_{pv}]T +gz$$ <br />
(= $$h_w$$ avec $$q_l\;=\;0$$ et $$q_i\;=\;0$$)
|}
[[Category:Physique]]
[[Category:Notes Techniques]]
bad4743e50fc64dd01aeb32f764225433438c304
104
103
2021-02-01T11:10:33Z
Lfairhead
1
/* II - Energies statiques: */
wikitext
text/x-wiki
$$\newcommand{\Condl}{Conditions aux limites }
\newcommand{\condl}{conditions aux limites }
\newcommand{\cad}{c'est-\`a-dire }
\newcommand{\Cad}{C'est-\`a-dire }
\newcommand{\tem}{temp\'erature }
\newcommand{\tems}{temp\'eratures }
\newcommand{\Tpni}{T_{\text{p,ni}}}
\newcommand{\Tp}{T_{\text{p}}}
\newcommand{\qpni}{q_{\text{p,ni}}}
\newcommand{\qp}{q_{\text{p}}}
\newcommand{\qsati}{q_{\text{sat,i}}}
\newcommand{\qsat}{q_{\text{sat}}}
\newcommand{\hpni}{h_{\text{p,ni}}}
\newcommand{\hp}{h_{\text{p}}}
%*KEEP,mathwake,T=LATEX.
\newcommand{\nab}{\vec{\nabla}}
\newcommand{\V}{\vec{V}}
\newcommand{\Vt}{\vec{\tilde{V}}}
\newcommand{\F}{\vec{F}}
\newcommand{\NF}{\|\vec{F}\|}
\newcommand{\CD}{C_D}
\newcommand{\pt}{\tilde{p}}
\newcommand{\Dt}{\tilde{D}}
\newcommand{\thetat}{\tilde{\theta}}
\newcommand{\alphat}{\tilde{\alpha}}
\newcommand{\Mt}{\tilde{M}}
\newcommand{\rhot}{\tilde{\rho}}
\newcommand{\qt}{\tilde{q}}
\newcommand{\Tt}{\tilde{T}}
\newcommand{\wt}{\tilde{w}}
\newcommand{\wbar}{\overline{w}}
\newcommand{\ubar}{\overline{u}}
\newcommand{\vbar}{\overline{v}}
\newcommand{\qbar}{\overline{q_v}}
\newcommand{\omgb}{\overline{\omega}}
\newcommand{\omgwb}{\overline{\omega_w}}
\newcommand{\omgub}{\overline{\omega_u}}
\newcommand{\omgxb}{\overline{\omega_x}}
\newcommand{\thetab}{\overline{\theta}}
\newcommand{\qvb}{\overline{q_v}}
\newcommand{\qvwb}{\overline{q_{vw}}}
\newcommand{\qvxb}{\overline{q_{vx}}}
\newcommand{\qvw}{q_{vw}}
\newcommand{\qvx}{q_{vx}}
\newcommand{\thetawb}{\overline{\theta_w}}
\newcommand{\thetaub}{\overline{\theta_u}}
\newcommand{\thetaxb}{\overline{\theta_x}}
\newcommand{\uwb}{\overline{u_w}}
\newcommand{\uub}{\overline{u_u}}
\newcommand{\uxb}{\overline{u_x}}
\newcommand{\vwb}{\overline{v_w}}
\newcommand{\vub}{\overline{v_u}}
\newcommand{\vxb}{\overline{v_x}}
\newcommand{\vwhat}{\hat{v_w}}
\newcommand{\vuhat}{\hat{v_u}}
\newcommand{\vxhat}{\hat{v_x}}
\newcommand{\Kb}{\overline{K}}
\newcommand{\alphab}{\overline{\alpha}}
\newcommand{\alphawb}{\overline{\alpha_w}}
\newcommand{\alphaub}{\overline{\alpha_u}}
\newcommand{\alphaxb}{\overline{\alpha_x}}
\newcommand{\rhob}{\overline{\rho}}
\newcommand{\sigw}{\ensuremath{\sigma_w}}
\newcommand{\dlt}{\delta t}
\newcommand{\Xrz}{X_{r}}
\newcommand{\Xr}[1]{X_{r(#1)}}
\newcommand{\Xrpz}{X_{rp}}
\newcommand{\Xrp}[1]{X_{rp(#1)}}
\newcommand{\Xrvz}{X_{rv}}
\newcommand{\Xrv}[1]{X_{rv(#1)}}
\newcommand{\Xrhz}{\hat{X}_{r}}
\newcommand{\Xrh}[1]{\hat{X}_{r(#1)}}
%%%\newcommand{\dlts2}{\frac{\dlt}{2}}
\newcommand{\dsdlt}{\frac{2}{\dlt}}
\newcommand{\vphi}{\vec{\varphi}}
\newcommand{\veta}{\vec{\eta}}
\newcommand{\vtheta}{\vec{\theta}}
\newcommand{\veps}{\vec{\varepsilon}}
\newcommand{\delphi}{\vec{\delta \varphi}}
\newcommand{\vG}{\vec{G}}
\newcommand{\vf}{\vec{f}}
\newcommand{\n}{\vec{n}}
\newcommand{\rl}{\rho_{l}}
\newcommand{\rv}{\rho_{v}}
\newcommand{\vv}{\vec{V}_{v}}
\newcommand{\vl}{\vec{V}_{l}}
%%%\newcommand{\v}{\vec{V}}
\newcommand{\g}{\vec{g}}
\newcommand{\dsdt}{\frac {\partial }{\partial t}}
\newcommand{\dst}{\partial_t}
\newcommand{\dsp}{\partial_p}
\newcommand{\dsz}{\partial_z}
\newcommand{\dsy}{\partial_y}
\newcommand{\dsx}{\partial_x}
\newcommand{\dsth}{\partial_{\theta}}
\newcommand{\dsq}{\partial_q}
\newcommand{\dsv}{\partial_V}
\newcommand{\dalpha}{\delta \alpha}
\newcommand{\dw}{\delta w}
\newcommand{\dqv}{\delta q_v}
\newcommand{\dtheta}{\delta \theta}
\newcommand{\domg}{\delta \omega}
\newcommand{\domgcv}{\delta \omega^{\text{cv}}}
%%\newcommand{\domgtop}{\delta \omega_{\text{top}}}
\newcommand{\domgtop}{\delta \omega_{w}}
%%\newcommand{\domgupper}{\delta \omega_{\text{upper}}}
\newcommand{\domgupper}{\delta \omega_{h}}
%%\newcommand{\ptop}{p_{\text{top}}}
\newcommand{\ptop}{p_{w}}
%%\newcommand{\pupper}{p_{\text{upper}}}
\newcommand{\pupper}{p_{h}}
%%\newcommand{\htop}{h_{\text{top}}}
\newcommand{\htop}{h_{w}}
%%\newcommand{\hupper}{h_{\text{upper}}}
\newcommand{\hupper}{h_{h}}
\newcommand{\intw}{\int_{\Sigma_w}}
\newcommand{\intu}{\int_{\Sigma_u}}
\newcommand{\intx}{\int_{\Sigma_x}}
\newcommand{\inte}{\int_{\Sigma_e}}
\newcommand{\intp}{\int_{\Sigma'}}
\newcommand{\intgw}{\int_{\Gamma_{w,in}}}
\newcommand{\intgwp}{\int_{\Gamma_{w,in}^+}}
\newcommand{\intgwm}{\int_{\Gamma_{w,in}^-}}
\newcommand{\intg}{\int_{\Gamma}}
\newcommand{\intgp}{\int_{\Gamma'}}
\newcommand{\intgpe}{\int_{\Gamma'_e}}
\newcommand{\intgpu}{\int_{\Gamma'_u}}
\newcommand{\intgpx}{\int_{\Gamma'_x}}
\newcommand{\intgpw}{\int_{\Gamma'_w}}
\newcommand{\kgw}{k_{\text{gw}}}
\newcommand{\taugw}{\tau_{\text{gw}}}
\newcommand{\klift}{k_{\text{lift}}}
%%\newcommand{\kliftw}{k_{\text{lift,wk}}}
\newcommand{\kliftw}{\mathcal{E}_{\text{lift}}^{\text{wk}}}
\newcommand{\Eliftw}{\mathcal{E}_{\text{lift}}^{\text{wk}}}
\newcommand{\Pb}{\ensuremath{P_{\text{buoy}}}}
\newcommand{\Pliftw}{\ensuremath{P_{\text{lift}}^{\text{wk}}}}
\newcommand{\Pliftwh}{\ensuremath{\widehat{P_{\text{lift}}^{\text{wk}}}}}
\newcommand{\Pliftwp}{\ensuremath{\widetilde{P_{\text{lift}}^{\text{wk}}}}}
\newcommand{\LG}{\ensuremath{L_{\Gamma}}}
\newcommand{\LGh}{\ensuremath{\widehat{L_{\Gamma}}}}
\newcommand{\LGp}{\ensuremath{\widetilde{L_{\Gamma}}}}
\newcommand{\LGt}{\ensuremath{\widetilde{L_{\Gamma}}}}
\newcommand{\Dw}{\ensuremath{D_{\text{wk}}}}
\newcommand{\QI}{\ensuremath{Q_1}}
\newcommand{\DQI}{\ensuremath{\delta Q_1}}
\newcommand{\QIsat}{\ensuremath{Q_{1}^{\text{sat}}}}
\newcommand{\QIcvsat}{\ensuremath{Q_{1}^{\text{cv,sat}}}}
\newcommand{\QIunsat}{\ensuremath{Q_{1}^{\text{unsat}}}}
\newcommand{\QIcvunsat}{\ensuremath{Q_{1}^{\text{cv,unsat}}}}
\newcommand{\QIIsat}{\ensuremath{Q_{2}^{\text{sat}}}}
\newcommand{\QIIcvsat}{\ensuremath{Q_{2}^{\text{cv,sat}}}}
\newcommand{\QIIunsat}{\ensuremath{Q_{2}^{\text{unsat}}}}
\newcommand{\QIIcvunsat}{\ensuremath{Q_{2}^{\text{cv,unsat}}}}
\newcommand{\QIw}{\ensuremath{Q_{1,w}}}
\newcommand{\QIcvw}{\ensuremath{Q_{1,w}^{\text{cv}}}}
\newcommand{\QIx}{\ensuremath{Q_{1,x}}}
\newcommand{\QIcvx}{\ensuremath{Q_{1,x}^{\text{cv}}}}
\newcommand{\QIcv}{\ensuremath{Q_{1}^{\text{cv}}}}
\newcommand{\DQIcv}{\ensuremath{\delta Q_{1}^{\text{cv}}}}
\newcommand{\QIbl}{\ensuremath{Q_{1}^{\text{bl}}}}
\newcommand{\QIcl}{\ensuremath{Q_{1}^{\text{cl}}}}
\newcommand{\QIwk}{\ensuremath{Q_{1}^{\text{wk}}}}
\newcommand{\DQIwk}{\ensuremath{\delta Q_{1}^{\text{wk}}}}
\newcommand{\QIp}{\ensuremath{Q_{1,p}}}
\newcommand{\QIS}{\ensuremath{\mathcal{Q}_{1}^S}}
\newcommand{\QID}{\ensuremath{\mathcal{Q}_{1}^D}}
\newcommand{\QIT}{\ensuremath{\mathcal{Q}_{1}^T}}
\newcommand{\QIE}{\ensuremath{\mathcal{Q}_{1}^E}}
\newcommand{\QII}{\ensuremath{Q_2}}
\newcommand{\DQII}{\ensuremath{\delta Q_2}}
\newcommand{\QIIw}{\ensuremath{Q_{2,w}}}
\newcommand{\QIIcvw}{\ensuremath{Q_{2,w}^{\text{cv}}}}
\newcommand{\QIIx}{\ensuremath{Q_{2,x}}}
\newcommand{\QIIcvx}{\ensuremath{Q_{2,x}^{\text{cv}}}}
\newcommand{\QIIcv}{\ensuremath{Q_{2}^{\text{cv}}}}
\newcommand{\DQIIcv}{\ensuremath{\delta Q_{2}^{\text{cv}}}}
\newcommand{\QIIbl}{\ensuremath{Q_{2}^{\text{bl}}}}
\newcommand{\QIIcl}{\ensuremath{Q_{2}^{\text{cl}}}}
\newcommand{\QIIwk}{\ensuremath{Q_{2}^{\text{wk}}}}
\newcommand{\DQIIwk}{\ensuremath{\delta Q_{2}^{\text{wk}}}}
\newcommand{\QIIp}{\ensuremath{Q_{2,p}}}
\newcommand{\QIIS}{\ensuremath{\mathcal{Q}_{2}^S}}
\newcommand{\QIID}{\ensuremath{\mathcal{Q}_{2}^D}}
\newcommand{\QIIT}{\ensuremath{\mathcal{Q}_{2}^T}}
\newcommand{\QIIE}{\ensuremath{\mathcal{Q}_{2}^E}}
\newcommand{\Sig}{\ensuremath{\Sigma\;}}
\newcommand{\Sigp}{\ensuremath{\Sigma'\;}}
\newcommand{\Sigw}{\ensuremath{\Sigma_w\;}}
\newcommand{\Sige}{\ensuremath{\Sigma_e}}
\newcommand{\Sigu}{\ensuremath{\Sigma_u}}
\newcommand{\Sigx}{\ensuremath{\Sigma_x}}
\newcommand{\Wb}{\ensuremath{W_{\text{buoy}}}}
\newcommand{\Wbb}{\bar{\bar{W}}}
\newcommand{\wa}{\langle w\rangle}
\newcommand{\wpa}{\langle w'\rangle}
\newcommand{\wwa}{\langle w^2\rangle}
\newcommand{\wwwa}{\langle w^3\rangle}
\newcommand{\wwpa}{\langle w^{\prime\prime\prime 2}\rangle}$$
Le but de cette note est d'établir les formules menant à la détermination des quantités
d'eau condensées sous forme d'eau liquide et de glace dans le sous-programme Fisrtilp. La
principale difficulté réside dans le fait que la condensation dégage de la chaleur latente
et que $$\qsat$$ dépend de la température. Dans tous ces calculs, on considère une couche
atmosphérique sans condensat de température $$T$$ et d'humidité spécifique $$q$$ et on se
donne la fraction $$f$$ de la maille où se produit la condensation. Le principe est d'écrire
que l'énergie statique humide et la quantité d'eau totale sont conservées dans le
processus de condensation.
Dans la première version créée par Laurent Li, on suppose que seule la partie
nuageuse de la maille voit sa température augmenter du fait de la condensation. Alors le
système que l'on décrit présente des températures différentes dans le nuage et hors du
nuage.
Laurent Li résoud :
\begin{equation}
C_p T' \;+\; L_v \qsat(T') \;=\; C_p T \;+\; L_v q
\label{eq.init}
\end{equation}
étant entendu que cela s'applique à la partie nuageuse de la maille.
Nous voulons, au contraire, écrire que les températures sont toujours uniformisées
horizontalement très rapidement (et même on va supposer instantanément). En outre nous
allons généraliser les calculs au cas où de la condensation solide est présente et nous
allons profiter de l'occasion pour écrire des formules complètes prenant en compte la
variation des chaleurs latentes avec la température (voir dans l'annexe les formules donnant
l'énergie statique humide $$h$$).
== Écriture des équations de conservation ==
Soit donc $$f$$ la fraction nuageuse. On écrit que sur $$f$$ il y a condensation et que sur
$$(1-f)$$ il n'y a pas de changement de phase. On suppose connu le contenu massique total
d'eau $$q_n$$ (i.e. vapeur + liquide + glace) dans le nuage. En désignant par $$T'$$ la
température (uniforme) après condensation et par $$q"$$ l'humidité spécifique hors des
nuages, les énergies statiques massiques initiale $$h$$, dans le nuage $$h_n$$ et hors du
nuage $$h"$$ s'écrivent~:
\begin{equation}
\left \lbrace
\begin{array}{ll}
h_n &=\;[(1-q_n)C_{pd} + q_n C_l] T' + L_v \qsat - L_f q_i + gz \\
h" &=\;[(1-q")C_{pd} + q"C_l] T' + L_v q" + gz \\
h &=\;[(1-q)C_{pd} + q C_l] T + L_v q + gz \\
\end{array}
\right .
\end{equation}
où $$\qsat$$ désigne l'humidité saturante. Ce peut être l'humidité saturante à la
température $$T'$$ sur l'eau liquide ou sur la glace. A voir plus loin.
La conservation de l'énergie statique humide et de l'eau s'écrit~:
\begin{equation}
\left \lbrace
\begin{array}{ll}
f h_n + (1-f)h" &=\;h \\
f q_n + (1-f)q" &=\;q \\
\end{array}
\right .
\end{equation}
Ce qui donne~:
\begin{equation}
\left \lbrace
\begin{array}{l}
T'[C_{pd} + (f q_n + (1-f) q") (C_l-C_{pd})] + L_v [f \qsat + (1-f)q"] - L_f f q_i \\
\qquad \qquad = [C_{pd} + q (C_l-C_{pd})] T + L_v q \\
\\
q = f q_n + (1-f) q"\\
\end{array}
\right .
\end{equation}
Soit, en posant $$C_p = C_{pd} + (C_l-C_{pd}) q$$~:
\begin{equation}
\left \lbrace
\begin{array}{l}
C_p T' - f [L_v(q_n-\qsat) + L_f q_i] = C_p T \\
q = f q_n + (1-f) q"\\
\end{array}
\right .
\end{equation}
Maintenant nous supposons que la glace représente une fraction $$\gamma$$ du condensat~:
$$q_i = \gamma (q_n - \qsat)$$. Finalement les équations de conservation s'écrivent~:
\begin{equation}
\label{eq.conserv_fin}
\left \lbrace
\begin{array}{l}
C_p T' - f (L_v+\gamma L_f)(q_n-\qsat) = C_p T \\
q = f q_n + (1-f) q"\\
\end{array}
\right .
\end{equation}
== Mise en oeuvre ==
Nous supposons maintenant que $$\qsat$$ est égale à l'humidité saturante sur eau liquide
lorsqu'il n'y a pas de glace et à l'humidité saturante sur glace dès que la glace est
présente.
L'équation (\ref{eq.conserv_fin}) pour la température peut être écrite sous une forme
analogue à l'équation initiale (\ref{eq.init}) de Laurent Li~:
\begin{equation}
\label{eq.conserv_fin_lli}
C_p T' \;+\; f (L_v+\gamma L_f) \qsat(T')] \;=\; C_p T \;+\; f (L_v+\gamma L_f) q_n
\end{equation}
On constate que l'on passe de l'équation (\ref{eq.init}) à l'équation
(\ref{eq.conserv_fin_lli}) en remplaçant $$L_v$$ par $$f (L_v+\gamma L_f)$$ et $$q$$ par $$q_n$$.
L'itération convergeant vers $$T'$$ s'obtient ainsi directement à partir des formules de
Laurent~:
\begin{equation}
\displaystyle{
T'_{j+1}\;=\;T'_j\;+\;\frac{T-T'_j\;+\;\frac{f (L_v+\gamma L_f)}{C_p}[q_n\;-\;\qsat(T'_j)]}
{1\;+\;\frac{f (L_v+\gamma L_f)}{C_p}\partial_T\qsat(T'_j)} }
\label{eq.iter}
\end{equation}
L'expérience montre que cette itération converge assez vite, en 3 ou 4 passages. Elle va
fournir une valeur approchée $$T'_a$$ à partir de laquelle on peut calculer l'eau condensée~:
$$
c\;=\;f[q_n\;-\;\qsat(T'_a)]
$$
et les estimations finales de la température $$T'$$ et de l'humidité $$q'$$ telles que
l'énergie et l'eau soient exactement conservées~:
\begin{equation}
\left \lbrace
\begin{array}{l}
T'\;=\; T\;+\;\frac{L_v+\gamma L_f}{C_p}c \\
q'\;=\;q\;-\;c \\
\end{array}
\right .
\end{equation}
== Annexe: définitions des enthalpies et énergies statiques massiques ==
=== I - Enthalpies massiques: ===
Grandeurs conservées dans les \underline{transformations adiabatiques
isobares}.
\begin{equation}
\begin{array}{ll}
\left \lbrace
\begin{array}{lll}
k &=& (1-q_t) k_d + q_v k_v + q_l k_l + q_i k_i \\
L_v(T) &=& k_v - k_l \\
L_s(T) &=& k_v - k_i\;, \quad L_f(T) = L_s(T)-L_v(T)\\
k_d &=& C_{pd} T \\
k_l &=& C_l T \\
k_i &=& C_i T \\
\end{array}
\right \rbrace & \left .
\begin{array}{l}
\rm{enthalpie} \\
k=[(1-q_t) C_{pd} +q_t C_l] T + L_v q_v - L_f q_i\\
\end{array} \right .
\end{array}
\end{equation}
Comme $$L_v-(C_{pv}-C_l)T = \rm{cste}$$,
l'enthalpie avec eau liquide $$k_w=k-q_t[L_v-(C_{pv}-C_l)T]$$
est aussi conservée dans les transformations adiabatiques isobares~:
$$
k_w = [(1-q_t) C_{pd} + q_t C_{pv}] T - L_v q_l - L_s q_i
$$
On peut faire le même genre de chose pour obtenir une expression sans $$q_i$$,
ce qui donne~: et comme $$L_f-(C_l-C_i)T = \rm{cste}$$, l'enthalpie (sans nom)
$$k_i=k-q_t[L_f-(C_l-C_i)T]$$ est aussi conservée dans les transformations
adiabatiques isobares~:
$$
k_i = [(1-q_t) C_{pd} + q_t C_i] T+ L_s q_v + L_f q_l
$$
=== II - Energies statiques: ===
Grandeurs conservées dans les
<u>transformations adiabatiques où le changement
de pression est purement hydrostatique</u>.
\begin{equation}
\begin{array}{ll}
\left .
\begin{array}{lll}
\rm{Adiabatisme :} & dk &\displaystyle{=\frac{dp}{\rho} }\\
& & \\
\rm{Hydrostasie :} & \displaystyle{\frac{dp}{\rho} }&= -g dz
\end{array}
\right \rbrace & \left .
\begin{array}{l}
dk + g dz = 0 \\
\end{array} \right .
\end{array}
\end{equation}
{| border="1" style="border-collapse:collapse"
| Energie statique humide :
| $$h=[(1-q_t)C_{pd}+q_tC_l]T + L_v q_v - L_f q_i + gz$$
|-
| Energie statique avec eau liquide :
| $$h_w=[(1-q_t)C_{pd}+q_tC_{pv}]T - L_vq_l - L_s q_i + gz$$
|-
| Energie statique sans nom :
| $$h_i=[(1-q_t) C_{pd} + q_t C_i] T+ L_s q_v + L_f q_l + gz$$
|-
| Energie statique sèche :
| $$h_d=[(1-q)C_{pd}+qC_{pv}]T +gz$$ <br />
(= $$h_w$$ avec $$q_l\;=\;0$$ et $$q_i\;=\;0$$)
|}
[[Category:Physique]]
[[Category:Notes Techniques]]
390ba9ee4e2261e957594534c81e121007841671
106
104
2021-09-13T15:10:23Z
Jyg
2
wikitext
text/x-wiki
$$\newcommand{\Condl}{Conditions aux limites }
\newcommand{\condl}{conditions aux limites }
\newcommand{\cad}{c'est-\`a-dire }
\newcommand{\Cad}{C'est-\`a-dire }
\newcommand{\tem}{temp\'erature }
\newcommand{\tems}{temp\'eratures }
\newcommand{\Tpni}{T_{\text{p,ni}}}
\newcommand{\Tp}{T_{\text{p}}}
\newcommand{\qpni}{q_{\text{p,ni}}}
\newcommand{\qp}{q_{\text{p}}}
\newcommand{\qsati}{q_{\text{sat,i}}}
\newcommand{\qsat}{q_{\text{sat}}}
\newcommand{\hpni}{h_{\text{p,ni}}}
\newcommand{\hp}{h_{\text{p}}}
%*KEEP,mathwake,T=LATEX.
\newcommand{\nab}{\vec{\nabla}}
\newcommand{\V}{\vec{V}}
\newcommand{\Vt}{\vec{\tilde{V}}}
\newcommand{\F}{\vec{F}}
\newcommand{\NF}{\|\vec{F}\|}
\newcommand{\CD}{C_D}
\newcommand{\pt}{\tilde{p}}
\newcommand{\Dt}{\tilde{D}}
\newcommand{\thetat}{\tilde{\theta}}
\newcommand{\alphat}{\tilde{\alpha}}
\newcommand{\Mt}{\tilde{M}}
\newcommand{\rhot}{\tilde{\rho}}
\newcommand{\qt}{\tilde{q}}
\newcommand{\Tt}{\tilde{T}}
\newcommand{\wt}{\tilde{w}}
\newcommand{\wbar}{\overline{w}}
\newcommand{\ubar}{\overline{u}}
\newcommand{\vbar}{\overline{v}}
\newcommand{\qbar}{\overline{q_v}}
\newcommand{\omgb}{\overline{\omega}}
\newcommand{\omgwb}{\overline{\omega_w}}
\newcommand{\omgub}{\overline{\omega_u}}
\newcommand{\omgxb}{\overline{\omega_x}}
\newcommand{\thetab}{\overline{\theta}}
\newcommand{\qvb}{\overline{q_v}}
\newcommand{\qvwb}{\overline{q_{vw}}}
\newcommand{\qvxb}{\overline{q_{vx}}}
\newcommand{\qvw}{q_{vw}}
\newcommand{\qvx}{q_{vx}}
\newcommand{\thetawb}{\overline{\theta_w}}
\newcommand{\thetaub}{\overline{\theta_u}}
\newcommand{\thetaxb}{\overline{\theta_x}}
\newcommand{\uwb}{\overline{u_w}}
\newcommand{\uub}{\overline{u_u}}
\newcommand{\uxb}{\overline{u_x}}
\newcommand{\vwb}{\overline{v_w}}
\newcommand{\vub}{\overline{v_u}}
\newcommand{\vxb}{\overline{v_x}}
\newcommand{\vwhat}{\hat{v_w}}
\newcommand{\vuhat}{\hat{v_u}}
\newcommand{\vxhat}{\hat{v_x}}
\newcommand{\Kb}{\overline{K}}
\newcommand{\alphab}{\overline{\alpha}}
\newcommand{\alphawb}{\overline{\alpha_w}}
\newcommand{\alphaub}{\overline{\alpha_u}}
\newcommand{\alphaxb}{\overline{\alpha_x}}
\newcommand{\rhob}{\overline{\rho}}
\newcommand{\sigw}{\ensuremath{\sigma_w}}
\newcommand{\dlt}{\delta t}
\newcommand{\Xrz}{X_{r}}
\newcommand{\Xr}[1]{X_{r(#1)}}
\newcommand{\Xrpz}{X_{rp}}
\newcommand{\Xrp}[1]{X_{rp(#1)}}
\newcommand{\Xrvz}{X_{rv}}
\newcommand{\Xrv}[1]{X_{rv(#1)}}
\newcommand{\Xrhz}{\hat{X}_{r}}
\newcommand{\Xrh}[1]{\hat{X}_{r(#1)}}
%%%\newcommand{\dlts2}{\frac{\dlt}{2}}
\newcommand{\dsdlt}{\frac{2}{\dlt}}
\newcommand{\vphi}{\vec{\varphi}}
\newcommand{\veta}{\vec{\eta}}
\newcommand{\vtheta}{\vec{\theta}}
\newcommand{\veps}{\vec{\varepsilon}}
\newcommand{\delphi}{\vec{\delta \varphi}}
\newcommand{\vG}{\vec{G}}
\newcommand{\vf}{\vec{f}}
\newcommand{\n}{\vec{n}}
\newcommand{\rl}{\rho_{l}}
\newcommand{\rv}{\rho_{v}}
\newcommand{\vv}{\vec{V}_{v}}
\newcommand{\vl}{\vec{V}_{l}}
%%%\newcommand{\v}{\vec{V}}
\newcommand{\g}{\vec{g}}
\newcommand{\dsdt}{\frac {\partial }{\partial t}}
\newcommand{\dst}{\partial_t}
\newcommand{\dsp}{\partial_p}
\newcommand{\dsz}{\partial_z}
\newcommand{\dsy}{\partial_y}
\newcommand{\dsx}{\partial_x}
\newcommand{\dsth}{\partial_{\theta}}
\newcommand{\dsq}{\partial_q}
\newcommand{\dsv}{\partial_V}
\newcommand{\dalpha}{\delta \alpha}
\newcommand{\dw}{\delta w}
\newcommand{\dqv}{\delta q_v}
\newcommand{\dtheta}{\delta \theta}
\newcommand{\domg}{\delta \omega}
\newcommand{\domgcv}{\delta \omega^{\text{cv}}}
%%\newcommand{\domgtop}{\delta \omega_{\text{top}}}
\newcommand{\domgtop}{\delta \omega_{w}}
%%\newcommand{\domgupper}{\delta \omega_{\text{upper}}}
\newcommand{\domgupper}{\delta \omega_{h}}
%%\newcommand{\ptop}{p_{\text{top}}}
\newcommand{\ptop}{p_{w}}
%%\newcommand{\pupper}{p_{\text{upper}}}
\newcommand{\pupper}{p_{h}}
%%\newcommand{\htop}{h_{\text{top}}}
\newcommand{\htop}{h_{w}}
%%\newcommand{\hupper}{h_{\text{upper}}}
\newcommand{\hupper}{h_{h}}
\newcommand{\intw}{\int_{\Sigma_w}}
\newcommand{\intu}{\int_{\Sigma_u}}
\newcommand{\intx}{\int_{\Sigma_x}}
\newcommand{\inte}{\int_{\Sigma_e}}
\newcommand{\intp}{\int_{\Sigma'}}
\newcommand{\intgw}{\int_{\Gamma_{w,in}}}
\newcommand{\intgwp}{\int_{\Gamma_{w,in}^+}}
\newcommand{\intgwm}{\int_{\Gamma_{w,in}^-}}
\newcommand{\intg}{\int_{\Gamma}}
\newcommand{\intgp}{\int_{\Gamma'}}
\newcommand{\intgpe}{\int_{\Gamma'_e}}
\newcommand{\intgpu}{\int_{\Gamma'_u}}
\newcommand{\intgpx}{\int_{\Gamma'_x}}
\newcommand{\intgpw}{\int_{\Gamma'_w}}
\newcommand{\kgw}{k_{\text{gw}}}
\newcommand{\taugw}{\tau_{\text{gw}}}
\newcommand{\klift}{k_{\text{lift}}}
%%\newcommand{\kliftw}{k_{\text{lift,wk}}}
\newcommand{\kliftw}{\mathcal{E}_{\text{lift}}^{\text{wk}}}
\newcommand{\Eliftw}{\mathcal{E}_{\text{lift}}^{\text{wk}}}
\newcommand{\Pb}{\ensuremath{P_{\text{buoy}}}}
\newcommand{\Pliftw}{\ensuremath{P_{\text{lift}}^{\text{wk}}}}
\newcommand{\Pliftwh}{\ensuremath{\widehat{P_{\text{lift}}^{\text{wk}}}}}
\newcommand{\Pliftwp}{\ensuremath{\widetilde{P_{\text{lift}}^{\text{wk}}}}}
\newcommand{\LG}{\ensuremath{L_{\Gamma}}}
\newcommand{\LGh}{\ensuremath{\widehat{L_{\Gamma}}}}
\newcommand{\LGp}{\ensuremath{\widetilde{L_{\Gamma}}}}
\newcommand{\LGt}{\ensuremath{\widetilde{L_{\Gamma}}}}
\newcommand{\Dw}{\ensuremath{D_{\text{wk}}}}
\newcommand{\QI}{\ensuremath{Q_1}}
\newcommand{\DQI}{\ensuremath{\delta Q_1}}
\newcommand{\QIsat}{\ensuremath{Q_{1}^{\text{sat}}}}
\newcommand{\QIcvsat}{\ensuremath{Q_{1}^{\text{cv,sat}}}}
\newcommand{\QIunsat}{\ensuremath{Q_{1}^{\text{unsat}}}}
\newcommand{\QIcvunsat}{\ensuremath{Q_{1}^{\text{cv,unsat}}}}
\newcommand{\QIIsat}{\ensuremath{Q_{2}^{\text{sat}}}}
\newcommand{\QIIcvsat}{\ensuremath{Q_{2}^{\text{cv,sat}}}}
\newcommand{\QIIunsat}{\ensuremath{Q_{2}^{\text{unsat}}}}
\newcommand{\QIIcvunsat}{\ensuremath{Q_{2}^{\text{cv,unsat}}}}
\newcommand{\QIw}{\ensuremath{Q_{1,w}}}
\newcommand{\QIcvw}{\ensuremath{Q_{1,w}^{\text{cv}}}}
\newcommand{\QIx}{\ensuremath{Q_{1,x}}}
\newcommand{\QIcvx}{\ensuremath{Q_{1,x}^{\text{cv}}}}
\newcommand{\QIcv}{\ensuremath{Q_{1}^{\text{cv}}}}
\newcommand{\DQIcv}{\ensuremath{\delta Q_{1}^{\text{cv}}}}
\newcommand{\QIbl}{\ensuremath{Q_{1}^{\text{bl}}}}
\newcommand{\QIcl}{\ensuremath{Q_{1}^{\text{cl}}}}
\newcommand{\QIwk}{\ensuremath{Q_{1}^{\text{wk}}}}
\newcommand{\DQIwk}{\ensuremath{\delta Q_{1}^{\text{wk}}}}
\newcommand{\QIp}{\ensuremath{Q_{1,p}}}
\newcommand{\QIS}{\ensuremath{\mathcal{Q}_{1}^S}}
\newcommand{\QID}{\ensuremath{\mathcal{Q}_{1}^D}}
\newcommand{\QIT}{\ensuremath{\mathcal{Q}_{1}^T}}
\newcommand{\QIE}{\ensuremath{\mathcal{Q}_{1}^E}}
\newcommand{\QII}{\ensuremath{Q_2}}
\newcommand{\DQII}{\ensuremath{\delta Q_2}}
\newcommand{\QIIw}{\ensuremath{Q_{2,w}}}
\newcommand{\QIIcvw}{\ensuremath{Q_{2,w}^{\text{cv}}}}
\newcommand{\QIIx}{\ensuremath{Q_{2,x}}}
\newcommand{\QIIcvx}{\ensuremath{Q_{2,x}^{\text{cv}}}}
\newcommand{\QIIcv}{\ensuremath{Q_{2}^{\text{cv}}}}
\newcommand{\DQIIcv}{\ensuremath{\delta Q_{2}^{\text{cv}}}}
\newcommand{\QIIbl}{\ensuremath{Q_{2}^{\text{bl}}}}
\newcommand{\QIIcl}{\ensuremath{Q_{2}^{\text{cl}}}}
\newcommand{\QIIwk}{\ensuremath{Q_{2}^{\text{wk}}}}
\newcommand{\DQIIwk}{\ensuremath{\delta Q_{2}^{\text{wk}}}}
\newcommand{\QIIp}{\ensuremath{Q_{2,p}}}
\newcommand{\QIIS}{\ensuremath{\mathcal{Q}_{2}^S}}
\newcommand{\QIID}{\ensuremath{\mathcal{Q}_{2}^D}}
\newcommand{\QIIT}{\ensuremath{\mathcal{Q}_{2}^T}}
\newcommand{\QIIE}{\ensuremath{\mathcal{Q}_{2}^E}}
\newcommand{\Sig}{\ensuremath{\Sigma\;}}
\newcommand{\Sigp}{\ensuremath{\Sigma'\;}}
\newcommand{\Sigw}{\ensuremath{\Sigma_w\;}}
\newcommand{\Sige}{\ensuremath{\Sigma_e}}
\newcommand{\Sigu}{\ensuremath{\Sigma_u}}
\newcommand{\Sigx}{\ensuremath{\Sigma_x}}
\newcommand{\Wb}{\ensuremath{W_{\text{buoy}}}}
\newcommand{\Wbb}{\bar{\bar{W}}}
\newcommand{\wa}{\langle w\rangle}
\newcommand{\wpa}{\langle w'\rangle}
\newcommand{\wwa}{\langle w^2\rangle}
\newcommand{\wwwa}{\langle w^3\rangle}
\newcommand{\wwpa}{\langle w^{\prime\prime\prime 2}\rangle}$$
Le but de cette note est d'établir les formules menant à la détermination des quantités
d'eau condensées sous forme d'eau liquide et de glace dans le sous-programme Fisrtilp. La
principale difficulté réside dans le fait que la condensation dégage de la chaleur latente
et que $$\qsat$$ dépend de la température. Dans tous ces calculs, on considère une couche
atmosphérique sans condensat de température $$T$$ et d'humidité spécifique $$q$$ et on se
donne la fraction $$f$$ de la maille où se produit la condensation. Le principe est d'écrire
que l'énergie statique humide et la quantité d'eau totale sont conservées dans le
processus de condensation.
Dans la première version créée par Laurent Li, on suppose que seule la partie
nuageuse de la maille voit sa température augmenter du fait de la condensation. Alors le
système que l'on décrit présente des températures différentes dans le nuage et hors du
nuage.
Laurent Li résoud :
\begin{equation}
C_p T' \;+\; L_v \qsat(T') \;=\; C_p T \;+\; L_v q
\label{eq.init}
\end{equation}
étant entendu que cela s'applique à la partie nuageuse de la maille.
Nous voulons, au contraire, écrire que les températures sont toujours uniformisées
horizontalement très rapidement (et même on va supposer instantanément). En outre nous
allons généraliser les calculs au cas où de la condensation solide est présente et nous
allons profiter de l'occasion pour écrire des formules complètes prenant en compte la
variation des chaleurs latentes avec la température (voir dans l'annexe les formules donnant
l'énergie statique humide $$h$$).
== Écriture des équations de conservation ==
Soit donc $$f$$ la fraction nuageuse. On écrit que sur $$f$$ il y a condensation et que sur
$$(1-f)$$ il n'y a pas de changement de phase. On suppose connu le contenu massique total
d'eau $$q_n$$ (i.e. vapeur + liquide + glace) dans le nuage. En désignant par $$T'$$ la
température (uniforme) après condensation et par $$q"$$ l'humidité spécifique hors des
nuages, les énergies statiques massiques initiale $$h$$, dans le nuage $$h_n$$ et hors du
nuage $$h"$$ s'écrivent :
\begin{equation}
\left \lbrace
\begin{array}{ll}
h_n &=\;[(1-q_n)C_{pd} + q_n C_l] T' + L_v \qsat - L_f q_i + gz \\
h" &=\;[(1-q")C_{pd} + q"C_l] T' + L_v q" + gz \\
h &=\;[(1-q)C_{pd} + q C_l] T + L_v q + gz \\
\end{array}
\right .
\end{equation}
où $$\qsat$$ désigne l'humidité saturante. Ce peut être l'humidité saturante à la
température $$T'$$ sur l'eau liquide ou sur la glace. A voir plus loin.
La conservation de l'énergie statique humide et de l'eau s'écrit :
\begin{equation}
\left \lbrace
\begin{array}{ll}
f h_n + (1-f)h" &=\;h \\
f q_n + (1-f)q" &=\;q \\
\end{array}
\right .
\end{equation}
Ce qui donne :
\begin{equation}
\left \lbrace
\begin{array}{l}
T'[C_{pd} + (f q_n + (1-f) q") (C_l-C_{pd})] + L_v [f \qsat + (1-f)q"] - L_f f q_i \\
\qquad \qquad = [C_{pd} + q (C_l-C_{pd})] T + L_v q \\
\\
q = f q_n + (1-f) q"\\
\end{array}
\right .
\end{equation}
Soit, en posant $$C_p = C_{pd} + (C_l-C_{pd}) q$$ :
\begin{equation}
\left \lbrace
\begin{array}{l}
C_p T' - f [L_v(q_n-\qsat) + L_f q_i] = C_p T \\
q = f q_n + (1-f) q"\\
\end{array}
\right .
\end{equation}
Maintenant nous supposons que la glace représente une fraction $$\gamma$$ du condensat :
$$q_i = \gamma (q_n - \qsat)$$. Finalement les équations de conservation s'écrivent :
\begin{equation}
\label{eq.conserv_fin}
\left \lbrace
\begin{array}{l}
C_p T' - f (L_v+\gamma L_f)(q_n-\qsat) = C_p T \\
q = f q_n + (1-f) q"\\
\end{array}
\right .
\end{equation}
== Mise en oeuvre ==
Nous supposons maintenant que $$\qsat$$ est égale à l'humidité saturante sur eau liquide
lorsqu'il n'y a pas de glace et à l'humidité saturante sur glace dès que la glace est
présente.
L'équation (\ref{eq.conserv_fin}) pour la température peut être écrite sous une forme
analogue à l'équation initiale (\ref{eq.init}) de Laurent Li :
\begin{equation}
\label{eq.conserv_fin_lli}
C_p T' \;+\; f (L_v+\gamma L_f) \qsat(T')] \;=\; C_p T \;+\; f (L_v+\gamma L_f) q_n
\end{equation}
On constate que l'on passe de l'équation (\ref{eq.init}) à l'équation
(\ref{eq.conserv_fin_lli}) en remplaçant $$L_v$$ par $$f (L_v+\gamma L_f)$$ et $$q$$ par $$q_n$$.
L'itération convergeant vers $$T'$$ s'obtient ainsi directement à partir des formules de
Laurent :
\begin{equation}
\displaystyle{
T'_{j+1}\;=\;T'_j\;+\;\frac{T-T'_j\;+\;\frac{f (L_v+\gamma L_f)}{C_p}[q_n\;-\;\qsat(T'_j)]}
{1\;+\;\frac{f (L_v+\gamma L_f)}{C_p}\partial_T\qsat(T'_j)} }
\label{eq.iter}
\end{equation}
L'expérience montre que cette itération converge assez vite, en 3 ou 4 passages. Elle va
fournir une valeur approchée $$T'_a$$ à partir de laquelle on peut calculer l'eau condensée :
$$
c\;=\;f[q_n\;-\;\qsat(T'_a)]
$$
et les estimations finales de la température $$T'$$ et de l'humidité $$q'$$ telles que
l'énergie et l'eau soient exactement conservées :
\begin{equation}
\left \lbrace
\begin{array}{l}
T'\;=\; T\;+\;\frac{L_v+\gamma L_f}{C_p}c \\
q'\;=\;q\;-\;c \\
\end{array}
\right .
\end{equation}
== Annexe: définitions des enthalpies et énergies statiques massiques ==
=== I - Enthalpies massiques: ===
Grandeurs conservées dans les <u>transformations adiabatiques
isobares</u>.
\begin{equation}
\begin{array}{ll}
\left \lbrace
\begin{array}{lll}
k &=& (1-q_t) k_d + q_v k_v + q_l k_l + q_i k_i \\
L_v(T) &=& k_v - k_l \\
L_s(T) &=& k_v - k_i\;, \quad L_f(T) = L_s(T)-L_v(T)\\
k_d &=& C_{pd} T \\
k_l &=& C_l T \\
k_i &=& C_i T \\
\end{array}
\right \rbrace & \left .
\begin{array}{l}
\rm{enthalpie} \\
k=[(1-q_t) C_{pd} +q_t C_l] T + L_v q_v - L_f q_i\\
\end{array} \right .
\end{array}
\end{equation}
Comme $$L_v-(C_{pv}-C_l)T = \rm{cste}$$,
l'enthalpie avec eau liquide $$k_w=k-q_t[L_v-(C_{pv}-C_l)T]$$
est aussi conservée dans les transformations adiabatiques isobares :
$$
k_w = [(1-q_t) C_{pd} + q_t C_{pv}] T - L_v q_l - L_s q_i
$$
On peut faire le même genre de chose pour obtenir une expression sans $$q_i$$,
ce qui donne : et comme $$L_f-(C_l-C_i)T = \rm{cste}$$, l'enthalpie (sans nom)
$$k_i=k-q_t[L_f-(C_l-C_i)T]$$ est aussi conservée dans les transformations
adiabatiques isobares :
$$
k_i = [(1-q_t) C_{pd} + q_t C_i] T+ L_s q_v + L_f q_l
$$
=== II - Energies statiques: ===
Grandeurs conservées dans les
<u>transformations adiabatiques où le changement
de pression est purement hydrostatique</u>.
\begin{equation}
\begin{array}{ll}
\left .
\begin{array}{lll}
\rm{Adiabatisme :} & dk &\displaystyle{=\frac{dp}{\rho} }\\
& & \\
\rm{Hydrostasie :} & \displaystyle{\frac{dp}{\rho} }&= -g dz
\end{array}
\right \rbrace & \left .
\begin{array}{l}
dk + g dz = 0 \\
\end{array} \right .
\end{array}
\end{equation}
{| border="1" style="border-collapse:collapse"
| Energie statique humide :
| $$h=[(1-q_t)C_{pd}+q_tC_l]T + L_v q_v - L_f q_i + gz$$
|-
| Energie statique avec eau liquide :
| $$h_w=[(1-q_t)C_{pd}+q_tC_{pv}]T - L_vq_l - L_s q_i + gz$$
|-
| Energie statique sans nom :
| $$h_i=[(1-q_t) C_{pd} + q_t C_i] T+ L_s q_v + L_f q_l + gz$$
|-
| Energie statique sèche :
| $$h_d=[(1-q)C_{pd}+qC_{pv}]T +gz$$ <br />
(= $$h_w$$ avec $$q_l\;=\;0$$ et $$q_i\;=\;0$$)
|}
[[Category:Physique]]
[[Category:Notes Techniques]]
27f0f761e8d5dd716e62ae727938abbc08353606
107
106
2021-09-14T11:20:16Z
Jyg
2
wikitext
text/x-wiki
$$\newcommand{\Condl}{Conditions aux limites }
\newcommand{\condl}{conditions aux limites }
\newcommand{\cad}{c'est-\`a-dire }
\newcommand{\Cad}{C'est-\`a-dire }
\newcommand{\tem}{temp\'erature }
\newcommand{\tems}{temp\'eratures }
\newcommand{\Tpni}{T_{\text{p,ni}}}
\newcommand{\Tp}{T_{\text{p}}}
\newcommand{\qpni}{q_{\text{p,ni}}}
\newcommand{\qp}{q_{\text{p}}}
\newcommand{\qsati}{q_{\text{sat,i}}}
\newcommand{\qsat}{q_{\text{sat}}}
\newcommand{\hpni}{h_{\text{p,ni}}}
\newcommand{\hp}{h_{\text{p}}}
%*KEEP,mathwake,T=LATEX.
\newcommand{\nab}{\vec{\nabla}}
\newcommand{\V}{\vec{V}}
\newcommand{\Vt}{\vec{\tilde{V}}}
\newcommand{\F}{\vec{F}}
\newcommand{\NF}{\|\vec{F}\|}
\newcommand{\CD}{C_D}
\newcommand{\pt}{\tilde{p}}
\newcommand{\Dt}{\tilde{D}}
\newcommand{\thetat}{\tilde{\theta}}
\newcommand{\alphat}{\tilde{\alpha}}
\newcommand{\Mt}{\tilde{M}}
\newcommand{\rhot}{\tilde{\rho}}
\newcommand{\qt}{\tilde{q}}
\newcommand{\Tt}{\tilde{T}}
\newcommand{\wt}{\tilde{w}}
\newcommand{\wbar}{\overline{w}}
\newcommand{\ubar}{\overline{u}}
\newcommand{\vbar}{\overline{v}}
\newcommand{\qbar}{\overline{q_v}}
\newcommand{\omgb}{\overline{\omega}}
\newcommand{\omgwb}{\overline{\omega_w}}
\newcommand{\omgub}{\overline{\omega_u}}
\newcommand{\omgxb}{\overline{\omega_x}}
\newcommand{\thetab}{\overline{\theta}}
\newcommand{\qvb}{\overline{q_v}}
\newcommand{\qvwb}{\overline{q_{vw}}}
\newcommand{\qvxb}{\overline{q_{vx}}}
\newcommand{\qvw}{q_{vw}}
\newcommand{\qvx}{q_{vx}}
\newcommand{\thetawb}{\overline{\theta_w}}
\newcommand{\thetaub}{\overline{\theta_u}}
\newcommand{\thetaxb}{\overline{\theta_x}}
\newcommand{\uwb}{\overline{u_w}}
\newcommand{\uub}{\overline{u_u}}
\newcommand{\uxb}{\overline{u_x}}
\newcommand{\vwb}{\overline{v_w}}
\newcommand{\vub}{\overline{v_u}}
\newcommand{\vxb}{\overline{v_x}}
\newcommand{\vwhat}{\hat{v_w}}
\newcommand{\vuhat}{\hat{v_u}}
\newcommand{\vxhat}{\hat{v_x}}
\newcommand{\Kb}{\overline{K}}
\newcommand{\alphab}{\overline{\alpha}}
\newcommand{\alphawb}{\overline{\alpha_w}}
\newcommand{\alphaub}{\overline{\alpha_u}}
\newcommand{\alphaxb}{\overline{\alpha_x}}
\newcommand{\rhob}{\overline{\rho}}
\newcommand{\sigw}{\ensuremath{\sigma_w}}
\newcommand{\dlt}{\delta t}
\newcommand{\Xrz}{X_{r}}
\newcommand{\Xr}[1]{X_{r(#1)}}
\newcommand{\Xrpz}{X_{rp}}
\newcommand{\Xrp}[1]{X_{rp(#1)}}
\newcommand{\Xrvz}{X_{rv}}
\newcommand{\Xrv}[1]{X_{rv(#1)}}
\newcommand{\Xrhz}{\hat{X}_{r}}
\newcommand{\Xrh}[1]{\hat{X}_{r(#1)}}
%%%\newcommand{\dlts2}{\frac{\dlt}{2}}
\newcommand{\dsdlt}{\frac{2}{\dlt}}
\newcommand{\vphi}{\vec{\varphi}}
\newcommand{\veta}{\vec{\eta}}
\newcommand{\vtheta}{\vec{\theta}}
\newcommand{\veps}{\vec{\varepsilon}}
\newcommand{\delphi}{\vec{\delta \varphi}}
\newcommand{\vG}{\vec{G}}
\newcommand{\vf}{\vec{f}}
\newcommand{\n}{\vec{n}}
\newcommand{\rl}{\rho_{l}}
\newcommand{\rv}{\rho_{v}}
\newcommand{\vv}{\vec{V}_{v}}
\newcommand{\vl}{\vec{V}_{l}}
%%%\newcommand{\v}{\vec{V}}
\newcommand{\g}{\vec{g}}
\newcommand{\dsdt}{\frac {\partial }{\partial t}}
\newcommand{\dst}{\partial_t}
\newcommand{\dsp}{\partial_p}
\newcommand{\dsz}{\partial_z}
\newcommand{\dsy}{\partial_y}
\newcommand{\dsx}{\partial_x}
\newcommand{\dsth}{\partial_{\theta}}
\newcommand{\dsq}{\partial_q}
\newcommand{\dsv}{\partial_V}
\newcommand{\dalpha}{\delta \alpha}
\newcommand{\dw}{\delta w}
\newcommand{\dqv}{\delta q_v}
\newcommand{\dtheta}{\delta \theta}
\newcommand{\domg}{\delta \omega}
\newcommand{\domgcv}{\delta \omega^{\text{cv}}}
%%\newcommand{\domgtop}{\delta \omega_{\text{top}}}
\newcommand{\domgtop}{\delta \omega_{w}}
%%\newcommand{\domgupper}{\delta \omega_{\text{upper}}}
\newcommand{\domgupper}{\delta \omega_{h}}
%%\newcommand{\ptop}{p_{\text{top}}}
\newcommand{\ptop}{p_{w}}
%%\newcommand{\pupper}{p_{\text{upper}}}
\newcommand{\pupper}{p_{h}}
%%\newcommand{\htop}{h_{\text{top}}}
\newcommand{\htop}{h_{w}}
%%\newcommand{\hupper}{h_{\text{upper}}}
\newcommand{\hupper}{h_{h}}
\newcommand{\intw}{\int_{\Sigma_w}}
\newcommand{\intu}{\int_{\Sigma_u}}
\newcommand{\intx}{\int_{\Sigma_x}}
\newcommand{\inte}{\int_{\Sigma_e}}
\newcommand{\intp}{\int_{\Sigma'}}
\newcommand{\intgw}{\int_{\Gamma_{w,in}}}
\newcommand{\intgwp}{\int_{\Gamma_{w,in}^+}}
\newcommand{\intgwm}{\int_{\Gamma_{w,in}^-}}
\newcommand{\intg}{\int_{\Gamma}}
\newcommand{\intgp}{\int_{\Gamma'}}
\newcommand{\intgpe}{\int_{\Gamma'_e}}
\newcommand{\intgpu}{\int_{\Gamma'_u}}
\newcommand{\intgpx}{\int_{\Gamma'_x}}
\newcommand{\intgpw}{\int_{\Gamma'_w}}
\newcommand{\kgw}{k_{\text{gw}}}
\newcommand{\taugw}{\tau_{\text{gw}}}
\newcommand{\klift}{k_{\text{lift}}}
%%\newcommand{\kliftw}{k_{\text{lift,wk}}}
\newcommand{\kliftw}{\mathcal{E}_{\text{lift}}^{\text{wk}}}
\newcommand{\Eliftw}{\mathcal{E}_{\text{lift}}^{\text{wk}}}
\newcommand{\Pb}{\ensuremath{P_{\text{buoy}}}}
\newcommand{\Pliftw}{\ensuremath{P_{\text{lift}}^{\text{wk}}}}
\newcommand{\Pliftwh}{\ensuremath{\widehat{P_{\text{lift}}^{\text{wk}}}}}
\newcommand{\Pliftwp}{\ensuremath{\widetilde{P_{\text{lift}}^{\text{wk}}}}}
\newcommand{\LG}{\ensuremath{L_{\Gamma}}}
\newcommand{\LGh}{\ensuremath{\widehat{L_{\Gamma}}}}
\newcommand{\LGp}{\ensuremath{\widetilde{L_{\Gamma}}}}
\newcommand{\LGt}{\ensuremath{\widetilde{L_{\Gamma}}}}
\newcommand{\Dw}{\ensuremath{D_{\text{wk}}}}
\newcommand{\QI}{\ensuremath{Q_1}}
\newcommand{\DQI}{\ensuremath{\delta Q_1}}
\newcommand{\QIsat}{\ensuremath{Q_{1}^{\text{sat}}}}
\newcommand{\QIcvsat}{\ensuremath{Q_{1}^{\text{cv,sat}}}}
\newcommand{\QIunsat}{\ensuremath{Q_{1}^{\text{unsat}}}}
\newcommand{\QIcvunsat}{\ensuremath{Q_{1}^{\text{cv,unsat}}}}
\newcommand{\QIIsat}{\ensuremath{Q_{2}^{\text{sat}}}}
\newcommand{\QIIcvsat}{\ensuremath{Q_{2}^{\text{cv,sat}}}}
\newcommand{\QIIunsat}{\ensuremath{Q_{2}^{\text{unsat}}}}
\newcommand{\QIIcvunsat}{\ensuremath{Q_{2}^{\text{cv,unsat}}}}
\newcommand{\QIw}{\ensuremath{Q_{1,w}}}
\newcommand{\QIcvw}{\ensuremath{Q_{1,w}^{\text{cv}}}}
\newcommand{\QIx}{\ensuremath{Q_{1,x}}}
\newcommand{\QIcvx}{\ensuremath{Q_{1,x}^{\text{cv}}}}
\newcommand{\QIcv}{\ensuremath{Q_{1}^{\text{cv}}}}
\newcommand{\DQIcv}{\ensuremath{\delta Q_{1}^{\text{cv}}}}
\newcommand{\QIbl}{\ensuremath{Q_{1}^{\text{bl}}}}
\newcommand{\QIcl}{\ensuremath{Q_{1}^{\text{cl}}}}
\newcommand{\QIwk}{\ensuremath{Q_{1}^{\text{wk}}}}
\newcommand{\DQIwk}{\ensuremath{\delta Q_{1}^{\text{wk}}}}
\newcommand{\QIp}{\ensuremath{Q_{1,p}}}
\newcommand{\QIS}{\ensuremath{\mathcal{Q}_{1}^S}}
\newcommand{\QID}{\ensuremath{\mathcal{Q}_{1}^D}}
\newcommand{\QIT}{\ensuremath{\mathcal{Q}_{1}^T}}
\newcommand{\QIE}{\ensuremath{\mathcal{Q}_{1}^E}}
\newcommand{\QII}{\ensuremath{Q_2}}
\newcommand{\DQII}{\ensuremath{\delta Q_2}}
\newcommand{\QIIw}{\ensuremath{Q_{2,w}}}
\newcommand{\QIIcvw}{\ensuremath{Q_{2,w}^{\text{cv}}}}
\newcommand{\QIIx}{\ensuremath{Q_{2,x}}}
\newcommand{\QIIcvx}{\ensuremath{Q_{2,x}^{\text{cv}}}}
\newcommand{\QIIcv}{\ensuremath{Q_{2}^{\text{cv}}}}
\newcommand{\DQIIcv}{\ensuremath{\delta Q_{2}^{\text{cv}}}}
\newcommand{\QIIbl}{\ensuremath{Q_{2}^{\text{bl}}}}
\newcommand{\QIIcl}{\ensuremath{Q_{2}^{\text{cl}}}}
\newcommand{\QIIwk}{\ensuremath{Q_{2}^{\text{wk}}}}
\newcommand{\DQIIwk}{\ensuremath{\delta Q_{2}^{\text{wk}}}}
\newcommand{\QIIp}{\ensuremath{Q_{2,p}}}
\newcommand{\QIIS}{\ensuremath{\mathcal{Q}_{2}^S}}
\newcommand{\QIID}{\ensuremath{\mathcal{Q}_{2}^D}}
\newcommand{\QIIT}{\ensuremath{\mathcal{Q}_{2}^T}}
\newcommand{\QIIE}{\ensuremath{\mathcal{Q}_{2}^E}}
\newcommand{\Sig}{\ensuremath{\Sigma\;}}
\newcommand{\Sigp}{\ensuremath{\Sigma'\;}}
\newcommand{\Sigw}{\ensuremath{\Sigma_w\;}}
\newcommand{\Sige}{\ensuremath{\Sigma_e}}
\newcommand{\Sigu}{\ensuremath{\Sigma_u}}
\newcommand{\Sigx}{\ensuremath{\Sigma_x}}
\newcommand{\Wb}{\ensuremath{W_{\text{buoy}}}}
\newcommand{\Wbb}{\bar{\bar{W}}}
\newcommand{\wa}{\langle w\rangle}
\newcommand{\wpa}{\langle w'\rangle}
\newcommand{\wwa}{\langle w^2\rangle}
\newcommand{\wwwa}{\langle w^3\rangle}
\newcommand{\wwpa}{\langle w^{\prime\prime\prime 2}\rangle}$$
Le but de cette note est d'établir les formules menant à la détermination des quantités
d'eau condensées sous forme d'eau liquide et de glace dans le sous-programme Fisrtilp. La
principale difficulté réside dans le fait que la condensation dégage de la chaleur latente
et que $$\qsat$$ dépend de la température. Dans tous ces calculs, on considère une couche
atmosphérique sans condensat de température $$T$$ et d'humidité spécifique $$q$$ et on se
donne la fraction $$f$$ de la maille où se produit la condensation. Le principe est d'écrire
que l'énergie statique humide et la quantité d'eau totale sont conservées dans le
processus de condensation.
Dans la première version créée par Laurent Li, on suppose que seule la partie
nuageuse de la maille voit sa température augmenter du fait de la condensation. Alors le
système que l'on décrit présente des températures différentes dans le nuage et hors du
nuage.
Laurent Li résoud :
\begin{equation}
C_p T' \;+\; L_v \qsat(T') \;=\; C_p T \;+\; L_v q
\label{eq.init}
\end{equation}
étant entendu que cela s'applique à la partie nuageuse de la maille.
Nous voulons, au contraire, écrire que les températures sont toujours uniformisées
horizontalement très rapidement (et même on va supposer instantanément). En outre nous
allons généraliser les calculs au cas où de la condensation solide est présente et nous
allons profiter de l'occasion pour écrire des formules complètes prenant en compte la
variation des chaleurs latentes avec la température (voir dans l'annexe les formules donnant
l'énergie statique humide $$h$$).
== Écriture des équations de conservation ==
Soit donc $$f$$ la fraction nuageuse. On écrit que sur $$f$$ il y a condensation et que sur
$$(1-f)$$ il n'y a pas de changement de phase. On suppose connu le contenu massique total
d'eau $$q_n$$ (i.e. vapeur + liquide + glace) dans le nuage. En désignant par $$T'$$ la
température (uniforme) après condensation et par $$q"$$ l'humidité spécifique hors des
nuages, les énergies statiques massiques initiale $$h$$, dans le nuage $$h_n$$ et hors du
nuage $$h"$$ s'écrivent :
\begin{equation}
\left \lbrace
\begin{array}{ll}
h_n &=\;[(1-q_n)C_{pd} + q_n C_l] T' + L_v \qsat - L_f q_i + gz \\
h" &=\;[(1-q")C_{pd} + q"C_l] T' + L_v q" + gz \\
h &=\;[(1-q)C_{pd} + q C_l] T + L_v q + gz \\
\end{array}
\right .
\end{equation}
où $$\qsat$$ désigne l'humidité saturante. Ce peut être l'humidité saturante à la
température $$T'$$ sur l'eau liquide ou sur la glace. A voir plus loin.
La conservation de l'énergie statique humide et de l'eau s'écrit :
\begin{equation}
\left \lbrace
\begin{array}{ll}
f h_n + (1-f)h" &=\;h \\
f q_n + (1-f)q" &=\;q \\
\end{array}
\right .
\end{equation}
Ce qui donne :
\begin{equation}
\left \lbrace
\begin{array}{l}
T'[C_{pd} + (f q_n + (1-f) q") (C_l-C_{pd})] + L_v [f \qsat + (1-f)q"] - L_f f q_i \\
\qquad \qquad = [C_{pd} + q (C_l-C_{pd})] T + L_v q \\
\\
q = f q_n + (1-f) q"\\
\end{array}
\right .
\end{equation}
Soit, en posant $$C_p = C_{pd} + (C_l-C_{pd}) q$$ :
\begin{equation}
\left \lbrace
\begin{array}{l}
C_p T' - f [L_v(q_n-\qsat) + L_f q_i] = C_p T \\
q = f q_n + (1-f) q"\\
\end{array}
\right .
\end{equation}
Maintenant nous supposons que la glace représente une fraction $$\gamma$$ du condensat :
$$q_i = \gamma (q_n - \qsat)$$. Finalement les équations de conservation s'écrivent :
\begin{equation}
\label{eq.conserv_fin}
\left \lbrace
\begin{array}{l}
C_p T' - f (L_v+\gamma L_f)(q_n-\qsat) = C_p T \\
q = f q_n + (1-f) q"\\
\end{array}
\right .
\end{equation}
== Mise en oeuvre ==
Nous supposons maintenant que $$\qsat$$ est égale à l'humidité saturante sur eau liquide
lorsqu'il n'y a pas de glace et à l'humidité saturante sur glace dès que la glace est
présente.
L'équation (\ref{eq.conserv_fin}) pour la température peut être écrite sous une forme
analogue à l'équation initiale (\ref{eq.init}) de Laurent Li :
\begin{equation}
\label{eq.conserv_fin_lli}
C_p T' \;+\; f (L_v+\gamma L_f) \qsat(T')] \;=\; C_p T \;+\; f (L_v+\gamma L_f) q_n
\end{equation}
On constate que l'on passe de l'équation (\ref{eq.init}) à l'équation
(\ref{eq.conserv_fin_lli}) en remplaçant $$L_v$$ par $$f (L_v+\gamma L_f)$$ et $$q$$ par $$q_n$$.
L'itération convergeant vers $$T'$$ s'obtient ainsi directement à partir des formules de
Laurent :
\begin{equation}
\displaystyle{
T'_{j+1}\;=\;T'_j\;+\;\frac{T-T'_j\;+\;\frac{f (L_v+\gamma L_f)}{C_p}[q_n\;-\;\qsat(T'_j)]}
{1\;+\;\frac{f (L_v+\gamma L_f)}{C_p}\partial_T\qsat(T'_j)} }
\label{eq.iter}
\end{equation}
L'expérience montre que cette itération converge assez vite, en 3 ou 4 passages. Elle va
fournir une valeur approchée $$T'_a$$ à partir de laquelle on peut calculer l'eau condensée :
$$
c\;=\;f[q_n\;-\;\qsat(T'_a)]
$$
et les estimations finales de la température $$T'$$ et de l'humidité $$q'$$ telles que
l'énergie et l'eau soient exactement conservées :
\begin{equation}
\left \lbrace
\begin{array}{l}
T'\;=\; T\;+\;\frac{L_v+\gamma L_f}{C_p}c \\
q'\;=\;q\;-\;c \\
\end{array}
\right .
\end{equation}
== Annexe: définitions des enthalpies et énergies statiques massiques ==
=== I - Enthalpies massiques: ===
Grandeurs conservées dans les <u>transformations adiabatiques
isobares</u>.
\begin{equation}
\begin{array}{ll}
\left \lbrace
\begin{array}{lll}
k &=& (1-q_t) k_d + q_v k_v + q_l k_l + q_i k_i \\
L_v(T) &=& k_v - k_l \\
L_s(T) &=& k_v - k_i\;, \quad L_f(T) = L_s(T)-L_v(T)\\
k_d &=& C_{pd} T \\
k_l &=& C_l T \\
k_i &=& C_i T \\
\end{array}
\right \rbrace & \left .
\begin{array}{l}
\rm{enthalpie} \\
k=[(1-q_t) C_{pd} +q_t C_l] T + L_v q_v - L_f q_i\\
\end{array} \right .
\end{array}
\end{equation}
Comme $$L_v-(C_{pv}-C_l)T = \rm{cste}$$,
l'enthalpie avec eau liquide $$k_w=k-q_t[L_v-(C_{pv}-C_l)T]$$
est aussi conservée dans les transformations adiabatiques isobares :
$$
k_w = [(1-q_t) C_{pd} + q_t C_{pv}] T - L_v q_l - L_s q_i
$$
On peut faire le même genre de chose pour obtenir une expression sans $$q_i$$,
ce qui donne : et comme $$L_f-(C_l-C_i)T = \rm{cste}$$, l'enthalpie (sans nom)
$$k_i=k-q_t[L_f-(C_l-C_i)T]$$ est aussi conservée dans les transformations
adiabatiques isobares :
$$
k_i = [(1-q_t) C_{pd} + q_t C_i] T+ L_s q_v + L_f q_l
$$
=== II - Energies statiques: ===
Grandeurs conservées dans les
<u>transformations adiabatiques où le changement
de pression est purement hydrostatique</u>.
\begin{equation}
\begin{array}{ll}
\left .
\begin{array}{lll}
\rm{Adiabatisme :} & dk &\displaystyle{=\frac{dp}{\rho} }\\
& & \\
\rm{Hydrostasie :} & \displaystyle{\frac{dp}{\rho} }&= -g dz
\end{array}
\right \rbrace & \left .
\begin{array}{l}
dk + g dz = 0 \\
\end{array} \right .
\end{array}
\end{equation}
{| border="1" style="border-collapse:collapse"
| Energie statique humide :
| $$h=[(1-q_t)C_{pd}+q_tC_l]T + L_v q_v - L_f q_i + gz$$
|-
| Energie statique avec eau liquide :
| $$h_w=[(1-q_t)C_{pd}+q_tC_{pv}]T - L_vq_l - L_s q_i + gz$$
|-
| Energie statique sans nom :
| $$h_i=[(1-q_t) C_{pd} + q_t C_i] T+ L_s q_v + L_f q_l + gz$$
|-
| Energie statique sèche :
| $$h_d=[(1-q)C_{pd}+qC_{pv}]T +gz$$ <br />
(= $$h_w$$ avec $$q_l\;=\;0$$ et $$q_i\;=\;0$$)
|}
[[Category:Physique]]
[[Category:Notes Techniques]]
308c960732bbcbb5a6dc0695939c4e04619033db
Fichier:Mem partagee.jpg
6
42
76
2021-01-24T15:01:49Z
Lfairhead
1
Schéma mémoire partagée
wikitext
text/x-wiki
Schéma mémoire partagée
36ace6327bbb8e068971905ed1b433709837a387
Fichier:Mem distribuee.jpg
6
43
77
2021-01-24T15:04:43Z
Lfairhead
1
Schéma mémoire distribuée
wikitext
text/x-wiki
Schéma mémoire distribuée
4e46dd378c3da52934d261284aea1b9689e96b33
Fichier:Sortie install sh.jpg
6
44
78
2021-01-24T16:02:36Z
Lfairhead
1
Copie d'écran sortie install.sh
wikitext
text/x-wiki
Copie d'écran sortie install.sh
5a49d8f03d2f6d2ef031ed73945208435205aac4
Fichier:Modif init.jpg
6
45
79
2021-01-24T16:06:54Z
Lfairhead
1
copie écran modification script init
wikitext
text/x-wiki
copie écran modification script init
02fee6d539677e724b0789c2007152f56c790ac1
Fichier:Modif gcm.jpg
6
46
80
2021-01-24T16:11:54Z
Lfairhead
1
copie écran modification gcm.sh
wikitext
text/x-wiki
copie écran modification gcm.sh
a609f19053fc552a3f1a964ac2ccc2f889a0aa50
Fichier:Sortie init.jpg
6
47
81
2021-01-24T16:17:30Z
Lfairhead
1
copie d'écran sortie initial
wikitext
text/x-wiki
copie d'écran sortie initial
ead624aa14fad57714b4e1d461944cf04ede9630
Fichier:Run local.jpg
6
48
82
2021-01-24T16:20:17Z
Lfairhead
1
copie d'écran run_local
wikitext
text/x-wiki
copie d'écran run_local
a0b9d261cf84b57135fcc9dabceba448503543e4
Fichier:Sortie run local.jpg
6
49
83
2021-01-24T16:22:28Z
Lfairhead
1
copie d'écran sortie run_local
wikitext
text/x-wiki
copie d'écran sortie run_local
c176691561dfc65526c44c7bdc733f064bb59bb5
LMDZ en configuration parallèle (et un peu de descente d'échelle)
0
50
84
2021-01-24T16:26:06Z
Lfairhead
1
Page créée avec « === Principe de la parallélisation === Le parallélisme permet d’effectuer des opérations en simultané et donc de réduire les temps de calcul. Il s’oppose à un... »
wikitext
text/x-wiki
=== Principe de la parallélisation ===
Le parallélisme permet d’effectuer des opérations en simultané et donc de réduire les temps de calcul. Il s’oppose à un fonctionnement séquentiel dans lequel les opérations sont réalisées les unes à la suite des autres.
=== Les 2 types de parallélisation ===
==== Mémoire partagée ====
[[Fichier:Mem_partagee.jpg||Principe de la mémoire partagée]]
Principe de la mémoire partagée:
* Plusieurs processeurs travaillent sur une mémoire commune
* Programmable par OpenMP
Intérêt : prise en main facile, on n’a pas besoin de spécifier la distribution des données sur chaque processeur puisque tout le monde accède à l’ensemble des données. Il suffit seulement de définir les driectives du programme qui doivent être parallélisée (ce qui est déjà fait pour LMDZ). On peut voir ça comme une répartition des taches mais pas des ressources.
==== Mémoire distribuée ====
[[Fichier:Mem_distribuee.jpg]].
Principe de la mémoire distribuée:
* Chaque processeur accède à un espace mémoire qui lui est propre mais peut communiquer des informations aux autres processeurs. <br />
Ex avec LMDZ : 2 processeurs travaillent respectivement sur un espace mémoire correspondant à l’hémisphère Nord et l’autre à l’hémisphère Sud, ils ont uniquement besoin de communiquer des informations à la frontière (Equateur) : mémoire distribuée.
* Programmable avec MPI.
* On peut voir ça comme un partage des taches et des ressources, les limites de performance résident dans le temps de communication des procésseurs entre eux.
* Par la suite nous allons lancer une configuration hybride qui permet de tirer le maximum des deux répartitions de la mémoire.
=== Lancement d’une configuration hybride ===
==== Création d’un repertoire pour notre configuration ====
mkdir LMDZ_para
cd LMDZ_para
==== Gérer la mémoire et indiquer où se trouve la bibliothèque MPI ====
* La façon dont la mémoire doit être gérée est un sujet sensible et nous y reviendrons au moment où elle peut poser problème.
* Il faut renseigner l’emplacement de la bibliothèque MPI, pour trouver son emplacement on peut utiliser une commande comme : locate mpi
Une fois que le chemin est localisé :
ulimit -s unlimited
export LD_LIBRARY_PATH=/where/your/mpi/lib/is/lib:$LD_LIBRARY_PATH
Exemple :
export LD_LIBRARY_PATH=/usr/lib/openmpi/lib:$LD_LIBRARY_PATH
==== Installation de LMDZ parallèle ====
* On télécharge le modèle sur le site du LMD via wget.
* On s’accorde ensuite le droit d’execution sur install_lmdz.sh avec la commande chmod
* On compile le modèle en modèle parallèle (-parallel), avec un parallélisme hybride (mpi_omp), sur une grille de départ 48x36x39 pour le banc d’essai
wget http://www.lmd.jussieu.fr/~lmdz/pub/install_lmdz.sh
chmod +x install_lmdz.sh
./install_lmdz.sh -parallel mpi_omp -d 48x36x39
[[Fichier:Sortie_install_sh.jpg]].
La sortie si tout va bien
Les messages surlignés en jaune sont des indicateurs du bon déroulement de notre installation, il est essentiel que le banc d’essai ait tourné et donc que le répertoire BENCH48x36x39 existe.
==== 3.4 Mise en place d’une configuration personelle ====
On lance les commandes suivantes pour récupérer les fichiers nécessaires à la mise en place d’une configuration (voir: mandatory tutorial sur [[https://lmdz.lmd.jussieu.fr/utilisateurs/formation/2019]] pour plus d’informations) :
wget http://www.lmd.jussieu.fr/~lmdz/pub/Training/tutorial.tar
tar -xf tutorial.tar
cd TUTORIAL
Cette commande engendre la création d’un répertoire TUTORIAL dans lequel nous allons mettre en place une configuration personnelle. Dans cet exemple nous allons changer le nombre de points de grilles et passer de 48x36x39 à 72x36x39.
NB: le nombre de points de grilles selon x doit etre un multiple de 8 pour des raisons de filtrage.
On lance gedit init.sh et on modifie la valeur surligné en jaune. On peut remarquer qu’on tourne bien en configuration parallèle (via le parallel=1) mais aussi sans ORCHIDEE avec un modèle de sol simplifié (via le veget=0).
[[Fichier:Modif_init.jpg]]
Modifions la grille
En changeant le pas de grille nous avons doublé la résolution selon x. Afin de nous assurer que nous respectons toujours le critère CFL nous allons doubler le nombre de pas de temps par jour par rapport à la valeur initiale du tutoriel qui est valable pour la résolution de base. Pour cela on lance :
cd DEF
gedit gcm.def
Cf. figure [[Fichier:Modif_gcm.jpg]].
Modifions le pas de temps
Si tout se passe bien init.sh va lancer la création de plusieurs répertoires :
* INITIAL : contient tous les fichiers nécessaires à l’execution du modèle comme limit.nc, start.nc, startphy.nc qui viennent d’être créés et qui sont respectivement les conditions aux limites, l’état initial de la dynamique et l’état initial de la physique. On peut également y trouver notre grille dans grilles_gcm.nc qu’on peut visualiser via Ferret :
use grilles_gcm.nc newline
let rel=if (abs(grille_s-1) gt 0.5) then phis
shade/pal=land_sea_values rel ; go land
let deep=if (rel lt 0.1) then rel
shade/pal=blue/o deep
* SIMU1: un répertoire pour lancer une simulation
* PROD0 : un répertoire très ressemblant à SIMU1 mais muni d’outils qui permettent de gérer automatiquement les conditions initiales quand on veut prolonger une simulation (enchaine.sh)
Cf. figure [[Fichier:Sortie_init.jpg]].
Sortie de init.sh si tout va bien
==== 3.5 Execution via run_local.sh ====
A ce stade tout est près pour l’execution de notre simulation. Nous allons le faire via run_local.sh qui encapsule les commandes qu’on doit préciser pour faire tourner le modèle en prallélisme hybride.
En OpenMP il faut préciser le nombre de threads (équivalent au nombre de taches exécutées en simultanés) l’espace mémoire qu’on leur accorde.
En MPI il suffit de préciser le nombre de subdivions des taches.
Il faudrait donc écrire à chaque fois quelque chose comme :
export OMP_STACKSIZE=200M
export OMP_NUM_THREADS=2
mpirun -np 3 ./gcm.e
Si on ouvre run_local.sh, on se rend compte que ces commandes sont dans le script et qu’il suffit de préciser leur valeur en argument de la fonction.
[[Fichier:Run_local.jpg]].
Le contenu de run_local.sh
La suite du script permet de rassembler les parties mémoire gérée de façon distribuée via la fonction rebuild.
On peut donc lancer l’éxecution en tapant :
./run_local.sh 2 2 gcm.e
Remarque : on peut vérifier que la parallélisation réduit les temps de calcul en remplaçant les 2 par des 1, ce qui revient à ne pas subdiviser les taches.
[[Fichier:Sortie_run_local.jpg]].
Sortie de run_local.sh si tout va bien
On a dit au début que la gestion de la mémoire était un sujet sensible et il est possible d’obtenir des erreurs à l’éxecution liée à la façon dont on gère la mémoire.
* Premier type d’erreur : mpirun noticed that process rank 0 with PID 0 on node newhydra exited on signal 11 (Segmentation fault).
* Deuxième type d’erreur : mpirun noticed that process rank 1 with PID 0 on node newhydra exited on signal 11 (Segmentation fault).
La façon de gérer ces erreurs n’est pas très claire, mais afin de les résoudre on peut essayer :
* fermer la session et relancer (la commande ulimit -s unlimited du début est ainsi oublié)
* ulimit -s 20000 : on peut essayer de donner une valeur en dur (par forcément 20 000)
* ulimit -Ss unlimited
[[Category:HowTo]]
[[Category:parallel]]
95157cf65e088c345d0f8093ed8d8631a7374da9
85
84
2021-01-24T16:28:05Z
Lfairhead
1
wikitext
text/x-wiki
=== Principe de la parallélisation ===
Le parallélisme permet d’effectuer des opérations en simultané et donc de réduire les temps de calcul. Il s’oppose à un fonctionnement séquentiel dans lequel les opérations sont réalisées les unes à la suite des autres.
=== Les 2 types de parallélisation ===
==== Mémoire partagée ====
[[Fichier:Mem_partagee.jpg||Principe de la mémoire partagée]]
Principe de la mémoire partagée:
* Plusieurs processeurs travaillent sur une mémoire commune
* Programmable par OpenMP
Intérêt : prise en main facile, on n’a pas besoin de spécifier la distribution des données sur chaque processeur puisque tout le monde accède à l’ensemble des données. Il suffit seulement de définir les driectives du programme qui doivent être parallélisée (ce qui est déjà fait pour LMDZ). On peut voir ça comme une répartition des taches mais pas des ressources.
==== Mémoire distribuée ====
[[Fichier:Mem_distribuee.jpg]].
Principe de la mémoire distribuée:
* Chaque processeur accède à un espace mémoire qui lui est propre mais peut communiquer des informations aux autres processeurs. <br />
Ex avec LMDZ : 2 processeurs travaillent respectivement sur un espace mémoire correspondant à l’hémisphère Nord et l’autre à l’hémisphère Sud, ils ont uniquement besoin de communiquer des informations à la frontière (Equateur) : mémoire distribuée.
* Programmable avec MPI.
* On peut voir ça comme un partage des taches et des ressources, les limites de performance résident dans le temps de communication des procésseurs entre eux.
* Par la suite nous allons lancer une configuration hybride qui permet de tirer le maximum des deux répartitions de la mémoire.
=== Lancement d’une configuration hybride ===
==== Création d’un repertoire pour notre configuration ====
mkdir LMDZ_para
cd LMDZ_para
==== Gérer la mémoire et indiquer où se trouve la bibliothèque MPI ====
* La façon dont la mémoire doit être gérée est un sujet sensible et nous y reviendrons au moment où elle peut poser problème.
* Il faut renseigner l’emplacement de la bibliothèque MPI, pour trouver son emplacement on peut utiliser une commande comme : locate mpi
Une fois que le chemin est localisé :
ulimit -s unlimited
export LD_LIBRARY_PATH=/where/your/mpi/lib/is/lib:$LD_LIBRARY_PATH
Exemple :
export LD_LIBRARY_PATH=/usr/lib/openmpi/lib:$LD_LIBRARY_PATH
==== Installation de LMDZ parallèle ====
* On télécharge le modèle sur le site du LMD via wget.
* On s’accorde ensuite le droit d’execution sur install_lmdz.sh avec la commande chmod
* On compile le modèle en modèle parallèle (-parallel), avec un parallélisme hybride (mpi_omp), sur une grille de départ 48x36x39 pour le banc d’essai
wget http://www.lmd.jussieu.fr/~lmdz/pub/install_lmdz.sh
chmod +x install_lmdz.sh
./install_lmdz.sh -parallel mpi_omp -d 48x36x39
[[Fichier:Sortie_install_sh.jpg]].
La sortie si tout va bien
Les messages surlignés en jaune sont des indicateurs du bon déroulement de notre installation, il est essentiel que le banc d’essai ait tourné et donc que le répertoire BENCH48x36x39 existe.
==== 3.4 Mise en place d’une configuration personelle ====
On lance les commandes suivantes pour récupérer les fichiers nécessaires à la mise en place d’une configuration (voir: mandatory tutorial sur [[https://lmdz.lmd.jussieu.fr/utilisateurs/formation/2019]] pour plus d’informations) :
wget http://www.lmd.jussieu.fr/~lmdz/pub/Training/tutorial.tar
tar -xf tutorial.tar
cd TUTORIAL
Cette commande engendre la création d’un répertoire TUTORIAL dans lequel nous allons mettre en place une configuration personnelle. Dans cet exemple nous allons changer le nombre de points de grilles et passer de 48x36x39 à 72x36x39.
NB: le nombre de points de grilles selon x doit etre un multiple de 8 pour des raisons de filtrage.
On lance gedit init.sh et on modifie la valeur surligné en jaune. On peut remarquer qu’on tourne bien en configuration parallèle (via le parallel=1) mais aussi sans ORCHIDEE avec un modèle de sol simplifié (via le veget=0).
[[Fichier:Modif_init.jpg]]
Modifions la grille
En changeant le pas de grille nous avons doublé la résolution selon x. Afin de nous assurer que nous respectons toujours le critère CFL nous allons doubler le nombre de pas de temps par jour par rapport à la valeur initiale du tutoriel qui est valable pour la résolution de base. Pour cela on lance :
cd DEF
gedit gcm.def
[[Fichier:Modif_gcm.jpg]].
Modifions le pas de temps
Si tout se passe bien init.sh va lancer la création de plusieurs répertoires :
* INITIAL : contient tous les fichiers nécessaires à l’execution du modèle comme limit.nc, start.nc, startphy.nc qui viennent d’être créés et qui sont respectivement les conditions aux limites, l’état initial de la dynamique et l’état initial de la physique. On peut également y trouver notre grille dans grilles_gcm.nc qu’on peut visualiser via Ferret :
use grilles_gcm.nc newline
let rel=if (abs(grille_s-1) gt 0.5) then phis
shade/pal=land_sea_values rel ; go land
let deep=if (rel lt 0.1) then rel
shade/pal=blue/o deep
* SIMU1: un répertoire pour lancer une simulation
* PROD0 : un répertoire très ressemblant à SIMU1 mais muni d’outils qui permettent de gérer automatiquement les conditions initiales quand on veut prolonger une simulation (enchaine.sh)
[[Fichier:Sortie_init.jpg]].
Sortie de init.sh si tout va bien
==== 3.5 Execution via run_local.sh ====
A ce stade tout est près pour l’execution de notre simulation. Nous allons le faire via run_local.sh qui encapsule les commandes qu’on doit préciser pour faire tourner le modèle en prallélisme hybride.
En OpenMP il faut préciser le nombre de threads (équivalent au nombre de taches exécutées en simultanés) l’espace mémoire qu’on leur accorde.
En MPI il suffit de préciser le nombre de subdivions des taches.
Il faudrait donc écrire à chaque fois quelque chose comme :
export OMP_STACKSIZE=200M
export OMP_NUM_THREADS=2
mpirun -np 3 ./gcm.e
Si on ouvre run_local.sh, on se rend compte que ces commandes sont dans le script et qu’il suffit de préciser leur valeur en argument de la fonction.
[[Fichier:Run_local.jpg]].
Le contenu de run_local.sh
La suite du script permet de rassembler les parties mémoire gérée de façon distribuée via la fonction rebuild.
On peut donc lancer l’éxecution en tapant :
./run_local.sh 2 2 gcm.e
Remarque : on peut vérifier que la parallélisation réduit les temps de calcul en remplaçant les 2 par des 1, ce qui revient à ne pas subdiviser les taches.
[[Fichier:Sortie_run_local.jpg]].
Sortie de run_local.sh si tout va bien
On a dit au début que la gestion de la mémoire était un sujet sensible et il est possible d’obtenir des erreurs à l’éxecution liée à la façon dont on gère la mémoire.
* Premier type d’erreur : mpirun noticed that process rank 0 with PID 0 on node newhydra exited on signal 11 (Segmentation fault).
* Deuxième type d’erreur : mpirun noticed that process rank 1 with PID 0 on node newhydra exited on signal 11 (Segmentation fault).
La façon de gérer ces erreurs n’est pas très claire, mais afin de les résoudre on peut essayer :
* fermer la session et relancer (la commande ulimit -s unlimited du début est ainsi oublié)
* ulimit -s 20000 : on peut essayer de donner une valeur en dur (par forcément 20 000)
* ulimit -Ss unlimited
[[Category:HowTo]]
[[Category:parallel]]
6a060a73b751d9af35837a9f2cab730ead14d616
Création des fichiers de guidage et adaptation de l'exécution
0
51
86
2021-01-24T16:55:20Z
Lfairhead
1
Page créée avec « == Créer les fichiers de guidages == 1 => Créer le fichier grilles_gcm.nc avec ce0l. Pour cela, avant de lancer ce0l, ajouter dans run.def : grilles_gcm_netcdf=y 2 =>... »
wikitext
text/x-wiki
== Créer les fichiers de guidages ==
1 => Créer le fichier grilles_gcm.nc avec ce0l. Pour cela, avant de lancer ce0l, ajouter dans run.def :
grilles_gcm_netcdf=y
2 => Extraire les scripts pour interpolation de fichiers de guidage :
svn co http://forge.ipsl.jussieu.fr/igcmg/svn/CONFIG/LMDZOR/branches/LMDZOR_v4/CREATE/SCRIPT
3 => Recuperer les fichiers ERAI non-interpolé
4 => Interpoler avec interp_from_era.ksh. D'abord adapter qq variables en tete du script :
gridfile=chemin pour grilles_gcm.nc
indir= ou se trouver les fichier era-i
varlist="u v" : les variables a interpoler
outdir= repertoire de resultats
first_year=2011
last_year=2011
rundir= repertoire temporaire
./interp_from_era.ksh
== Adapter le run ==
5 => Crée le fichier guide.def, par exemple :
## debut guide.def
# ok_guide=y : guidage active
ok_guide=y
[[Category:guidage]]
[[Category:HowTo]]
guide_u= y
guide_v= y
guide_T= n
guide_P= n
guide_Q= n
tau_min_u=0.0208333
tau_max_u=0.125
tau_min_v=0.0208333
tau_max_v=0.125
## fin guide.def
Remarque :<br/>
Ici, dans ce guide.def, uniquement le guidage des variables u et v sont activé.<br/>
Temps de relaxation, pour une grille regulière, la valeur tau_max est utilisé, ici tau_max=0.125 => 3H.<br/>
Temps de relaxation, pour une grille zoomée, la valeur tau_max est utilisé à l'interieure de la zoom et tau_min à l'exterieur de la zoom, ici tau_min=0.0208333 => 30min.<br/>
Plus le temps de relaxation(tau) est petit, plus le guidage est fort..<br/>
6 => Ajouter en tete de run.def la prise en compte de la fichier guide.def :
INCLUDEDEF=guide.def
7 => Copier les fichier interpolé u_201101_erai.nc en u.nc et v_201101_erai.nc v.nc dans le repertoire où le modèle sera lancer :
ln -s ERAI_interp/2011/u_201101_erai.nc u.nc
ln -s ERAI_interp/2011/v_201101_erai.nc v.nc
8 => Lancer l'execution
./gcm.e > out_guide 2>&1
de3bb9d59941c3746e19b7ee399c421bf8aae3da
Conservation de l'eau
0
52
87
2021-01-24T16:58:05Z
Lfairhead
1
Page créée avec « Comme la variable qsol est incrémentée dans pbl_surface, c'est-à-dire au début de la physique, elle est incrémentée avec la précipitation du pas de temps précéden... »
wikitext
text/x-wiki
Comme la variable qsol est incrémentée dans pbl_surface, c'est-à-dire au début de la physique, elle est incrémentée avec la précipitation du pas de temps précédent (mais avec l'évaporation du pas de temps actuel). Donc, pour tester la conservation, il faut soit faire le graphe de dtime*precip + qsol + {intégrale verticale de ovap+ocond}, soit faire le graphe de {cumul de precip jusqu'à t} - {cumul de evap jusqu'à t} + {intégrale verticale de (ovap+ocond) à t}.
2b72e8e95f2d50e3db7079c3055576a2178354c5
Gustiness
0
53
88
2021-01-24T17:07:59Z
Lfairhead
1
Page créée avec « Les variables u, u10m et taux du modèle sont des moyennes ne comprenant pas la gustiness. Mais elles en dépendent bien sûr via la modification du coefficient d'échange... »
wikitext
text/x-wiki
Les variables u, u10m et taux du modèle sont des moyennes ne comprenant pas la gustiness. Mais elles en dépendent bien sûr via la modification du coefficient d'échange.
wind10m est le module du vent grande échelle. $$\sqrt{wind10m^2 + gusts}$$ est le module moyen tenant compte de la gustiness.
e9c81722ccd2ad439ae02f17a5c9e6e92affe1a3
Options d'évaporation dans fisrtilp
0
54
89
2021-01-24T17:21:51Z
Lfairhead
1
Page créée avec « Quand la pluie tombe dans la colonne atmosphérique, on en ré-évapore une partie. Cette ré-évaporation est en $$A (1 - RH) P^1/2$$ où $$RH$$ est l'humidité relativ... »
wikitext
text/x-wiki
Quand la pluie tombe dans la colonne atmosphérique, on en ré-évapore une partie. Cette ré-évaporation est en $$A (1 - RH) P^1/2$$ où $$RH$$ est l'humidité relative $$q/qsat$$, $$P$$ la précipitation et $$A$$ est un paramètre ajustable. On peut appliquer ça sur toute la maille. Mais ce faisant on ne tient pas compte du fait que la pluie ne tombe en fait que sur une fraction de la maille : sous les nuages.
Cet aspect était pris en compte au départ dans le modèle en calculant une évaporation maximum sous le nuage : $$neb (qsat - q)$$. Donc on évaporait sur toute la maille jusqu'à saturer la partie sous nuageuse. Mais cela marchait en considérant la fraction nuageuse dans la maille immédiatement au dessus. Ce faisant, dès qu'on était deux couches sous le nuage, on était censé majorer par 0 (qsat - q), donc ne plus évaporer. Pour que ce soit moins extrême, l'évaporation était en fait bornée par $$ max(0.001,neb) (qsat - q)$$, et ce quelque soit la fraction des nuages au dessus.
Le premier changement (iflag_evap_prec : 1 -> 2) a consisté à utiliser dans la formule du max un max de nébulosité sur les couches au dessus. Plus précisément un max sur les couches connexes au-dessus pour lesquelles on a soit des nuages soit un flux de précipitation non nul.
Le second changement (iflag_evap_prec=3) consiste à utiliser cette fraction "sous nuageuse", nebP dans le calcul de l'évaporation lui-même : $$ nebP (1 - RH) (P/nebP)^(1/2)$$.
Sachant qu'il faudrait revenir beaucoup plus sérieusement sur ce qui a conduit à cette formulation très empirique, utilisée par beaucoup.
Le but principal de ce changement était de renforcer la pluie sous les cumulus d'alizés (peu couvrants) par rapport aux stratocumulus (couvrant à 100%). Sur continents, cela favorise sans doute la pluie au détriment des nuages (plus forte efficacité de précipitation effective des nuages).
[[Category:physique]]
625eb50bd077f5a67ad08438ece4ec120a176000
Fichier:Flot des variables de temps.png
6
55
90
2021-01-24T17:25:54Z
Lfairhead
1
Flot_des_variables_de_temps
wikitext
text/x-wiki
Flot_des_variables_de_temps
a4c2c3da72edb5ed5dc8d81c4e34f008a6d06ae8
Flot des variables de temps
0
56
91
2021-01-24T17:33:28Z
Lfairhead
1
Page créée avec « [[Fichier:Flot_des_variables_de_temps.png]] ''Légende'' : vert pour les modules, rouge pour les fichiers, noir pour les procédures, bleu pour les variables locales et a... »
wikitext
text/x-wiki
[[Fichier:Flot_des_variables_de_temps.png]]
''Légende'' : vert pour les modules, rouge pour les fichiers, noir pour les procédures, bleu pour les variables locales et arguments. Cf. [[Diagramme_de_flot_de_données| légende plus détaillée]]. Fichier source LibreOffice pour le graphique.
jd_ref est un jour julien. etat0_netcdf met dayref dans la variable controle(30) (indice Fortran) de start.nc. Après, à chaque simulation enchaînée, sans remise à zéro de la date, day_ini est rempli avec controle(30) de start.nc, il lui est ajouté nday pour donner day_end, qui est écrit dans controle(30) de restart.nc. Donc, si on écarte le cas d’une remise à zéro de la date, (annee_ref,day_ref) est le premier jour de la première simulation, sert comme origine des temps dans les fichiers d’historiques, et ne change pas lorsqu’on enchaîne les simulations. (annee_ref,day_ini) est le premier jour de la simulation en cours et change à chaque simulation enchaînée. Par exemple, pour une première simulation de 2 mois à partir du 1erdécembre 1980, calendrier de 360 jours, on a : annee_ref = 1980, day_ref = 331, nday = 60, day_ini = 331. Pour une deuxième simulation enchaînée sans remise à zéro de la date, on a : annee_ref = 1980, day_ref = 331, day_ini = 391.
2fb2853e719fc2b4c45f41b831254f1c59fc3c23
Fichier:Esesi.png
6
57
92
2021-01-24T17:39:41Z
Lfairhead
1
Formation de glace et température
wikitext
text/x-wiki
Formation de glace et température
1d45bd3a516ed7e6cf783ca7adddcf1ab4306e55
Formation de glace et température
0
58
93
2021-01-24T22:05:53Z
Lfairhead
1
Page créée avec « == Calcul de l'effet de la formation de glace sur la température de la particule soulevée adiabatiquement == == JYG & AJ Sep 27, 2018 == Cette note a pour but de déta... »
wikitext
text/x-wiki
== Calcul de l'effet de la formation de glace sur la température de la particule soulevée adiabatiquement ==
== JYG & AJ Sep 27, 2018 ==
Cette note a pour but de détailler les calculs permettant de déterminer la température d'une particule soulévée adiabatiquement lorsqu'il y a formation de glace. Elle se place dans la suite du travail d'Arnaud Jam et en particulier de son mémoire de 1998. Plus précisément, il s'agit de (re-)construire la procédure de calcul à mettre dans ündilute2" (ou dans "tlift" pour les anciennes versions) après l'appel de la procédure ïcefrac". L'idée générale dans tous ces calculs est que les particules d'air ascendant sont loin de l'équilibre et que leur phase condensée peut, à un même niveau, présenter une fraction englacée allant de 0% à 100%. La première phase du calcul ayant consisté à déterminer les caractéristiques des particules sans glace il s'agit ici de calculer la température des particules comportant la fraction englacée déterminée par la procédure ïcefrac".
On considère donc une particule de contenu en eau total $$q_t$$, dont on connait la température $$T_{p,ni}$$ et l'humidité massique $$q_{p,ni}$$ en l'absence de formation de glace (suffixe "ni" pour "no ice") et le contenu massique en glace, $$q_i$$. On se donne aussi la température $$T$$ de l'environnement au même niveau (cette température est supposée proche de la température de la particule avec glace).
On utilise les chaleurs latentes à la température $$T$$ :
{|
| vaporisation
| $$L_v = L_{v0} + (C_{pv}−C_l)(T−T_0)$$
|-
| sublimation
| $$ Ls = L_{s0} + (C_{pv}−C_i)(T−T_0)$$
|-
| fusion
| $$ L_f = L_s − L_v = L_{s0} − L_{v0} + (C_l−C_i)(T−T0) $$
|} (1)
où $$L_{v0}$$ et $$L_{s0}$$ sont les chaleurs latentes de vaporisation et de sublimation au point triple $$T_0$$ de l'eau ($$T_0$$ = 273.15 K). Les pressions de vapeur saturante, $$e_s$$ sur l'eau liquide et $$e_{si}$$ sur la glace sont données par les formules :
$$ e_s(T) = 6.112 exp[17.67 \frac{T−T_0}
{T−29.65} ]$$
$$e_{si}(T)= exp[23.33086 − \frac{6111.72784}
{T} + 0.15215 log(T)]
$$
(2)
Les graphes de ces fonctions sont portés sur la figure. Ils se croisent évidemment au point triple (T = 273.15 K, $$e_s$$ = $$e_{si}$$ = 6.112 hPa).
[[Fichier:Esesi.png]]
Figure 1: Graphes des fonctions $$e_s$$ et $$e_{si}$$.
Avec $$e_s$$ et $$e_{si}$$ on peut écrire les humidités massiques à saturation :
$$q_{sat} = \frac{ϵe_s}
{p − (1−ϵ)e_s} ≅ e_s \frac{ϵ}
{p}$$ et $$ q_{sat,i} = \frac{ϵe_{si}}
{p − (1−ϵ)e_{si}}≅ e_{si} \frac {ϵ}{p}$$
où $$ ϵ = R_d/R_v ≅ 0.62 $$ (noter que $$ q_{p,ni} = q_{sat}(T_{p,ni)})$$.
L'application de la formule de Clausius-Clapeyron donne en outre :
$$ \frac{d q_{sat,i}}{d T}(T) = \frac {L_s q_{sat,i}}{R_v T^2}$$
Les énergies statiques s'écrivent :
$$h_{p,ni} = [(1−q_t)C_{pd}+q_tC_l] T_{p,ni} + L_v q_{sat}(T_{p,ni}) + gz $$
pour la particule sans glace et
$$ h_p= [(1−q_t)C_{pd}+q_tC_l] T_p + L_v q_{sat,i}(T_p) − L_f q_i + gz $$
pour la particule avec glace.
En écrivant que l'énergie statique est conservée lors de la formation de glace, on obtient :
$$ [(1−q_t)C_{pd}+q_tC_l] T_{p,ni} + L_v q_{sat}(T_{p,ni}) = [(1−q_t)C_{pd}+q_tC_l] T_p + L_v q_{sat,i}(Tp) − L_f q_i $$
ce qui donne l'équation à résoudre en $$T_p$$ :
$$ [(1−q_t)C_{pd}+q_tC_l] (T_p − T_{p,ni}) = L_v (q_{sat}(T_{p,ni})−q_{sat,i}(T_p)) + L_f q_i$$
(3)
=== Résolution ===
On résoud l´équation par la méthode de Newton : on construit une suite $$T_j$$ partant de $$T_1 = ~T$$ et convergeant vers $$T_p$$ ; on passe de $$T_j$$ a $$T_{j+1}$$ par l'équation obtenue en linéarisant l'équation (3) :
$$ [(1−q_t)C_{pd}+q_tC_l] (T_{j+1} − T_{p,ni}) = L_v [q_{sat}(T_{p,ni}) − q_{sat,i}(T_j)− \frac{d q_{sat,i}}
{d T} (T_j)(T_{j+1}−T_j) ] + L_f q_i$$ (4)
Ce qui donne :
{|
| $$ [(1−q_t)C_{pd}+q_tC_l + L_v \frac {d q_{sat,i}} {d T}(T_j)] (T_{j+1}−T_j) $$
| $$ =[(1−q_t)C_{pd}+q-tC-l](T-{p,ni} − T_j) $$
|-
|
| $$ + L_v [q_{sat}(T_{p,ni}) − q_{sat,i}(T_j)] $$
|-
|
| $$ + L_f q_i $$
|}
(5)
soit :
$$ T_{j+1} = T_j + \frac { [(1−q_t)C_{pd}+q_tC_l](T_{p,ni} − T_j) + L_v [q_{sat}(T_{p,ni})−q_{sat,i}(T_j)] + L_f q_i}
{(1−q_t)C_{pd}+q_tC_l + L_v \frac {d q_{sat,i}}{ d T} (T_j)} $$ (6)
et, finalement, en utilisant Clausius-Clapeyron :
$$ T_{j+1} = T_j + \frac { [(1−q_t)C_{pd}+q_tC_l](T_{p,ni} − T_j) + L_v [q_{p,ni}−q_{sat,i}(T_j)] + L_f qi}
{(1−q_t)C_{pd}+q_tC_l +\frac {L_v L_s q_{sat,i}(T_j)}{ R_v T^2}} $$ (7)
=== Dans le code ===
La température de la particule avec glace $$T_p$$ ainsi que les approximations successives $$T_j$$ sont notées $$tp(i,k)$$. Les caractéristiques de la particule sans glace sont notées $$tg$$ pour $$T_{p,ni}$$ et $$qg$$ pour $$q_{p,ni}$$. L'eau totale est notées $$qnk(i)$$. Enfin la température $$T$$ de l'environnement est notée $$t(i,k)$$.
Tout cela donne la boucle :
alv=lv0-clmcpv*(t(i,k)-273.15)
alf=lf0+clmci*(t(i,k)-273.15)
als=alf+alv
tg=tp(i,k) ! On garde dans tg la temperature sans glace
tp(i,k) = t(i,k) ! L'iteration part de la temperature de l'environnement
do j=1,4
esi=exp(23.33086-(6111.72784/tp(i,k))
: +0.15215*log(tp(i,k)))
qsat_new=eps*esi/(p(i,k)-esi*(1.-eps))
snew=cpd*(1.-qnk(i))+cl*qnk(i)+alv*als*qsat_new/
: (rrv*tp(i,k)*tp(i,k))
snew=1./snew
tp(i,k)=tp(i,k)+
: ( (cpd*(1.-qnk(i))+cl*qnk(i))*(tg-tp(i,k)) +
: alv*(qg-qsat_new) + alf*qi(i,k) )*snew
enddo
L'expérience montre que l'itération converge en moins de quatre coups à mieux que 0.01 K.
=== Remarques ===
* Les formules donnant les pressions de vapeur saturante devraient s'écrire de façon plus physique :
$$ e_{s0} $$ = 6.112 hPa Pression de vapeur saturante au point triple
$$e_s(T) = e_{s0} exp[17.67 \frac{ T−T_0}{T−29.65}] $$
$$ e_{si}(T) = e_{s0} exp[−6111.72784(\frac {1}{T} − \frac{1}{T0}) + 0.15215 log(\frac{T}{T0} )]$$ (8)
Le fait que l'itération converge prouve que l'on résoud bien l'équation (3). La question est alors de savoir si l'équation (3) est bien correcte. Les doutes portent sur l'écriture de l'énergie statique (dans le rapport d'Arnaud en 1998 il y a un un signe + devant le terme $$L_f q_i$$) et sur la dépendance en température de $$L_f$$ (signe contraire pour Arnaud). Il y a aussi un doute sur l'application de la relation de Clausius-Clapeyron à la sublimation mais, comme cela ne sert qu'à la résolution de l'équation (3), c'est sans importance.
La procédure Icefrac détermine un contenu total en glace. Comme ce contenu est déterminé avant le calcul de la température, on risque d'avoir un contenu en glace supérieur au contenu condensé. Il serait plus correct que Icefrac détermine la proportion de condensat qui est sous forme glace, puis qu'on résolve l'équation en température en tenant compte de la variation du contenu total en glace. En désignant par fi la fraction de condansat qui est sous forme glace, l'équation (3) deviendrait :
$$ [(1−q_t)C_{pd}+q_tC_l] (T_p − T_{p,ni}) = L_v (q_{sat}(T_{p,ni})−q_{sat,i}(T_p)) + L_f f_i (q_t − q_{sat,i}(T_p))$$ (9)
[[Category:notes techniques]]
aeeba85d0e2a4b2e4494a6547f0525358512e1a0
100
93
2021-01-24T22:30:15Z
Lfairhead
1
/* JYG & AJ Sep 27, 2018 */
wikitext
text/x-wiki
== Calcul de l'effet de la formation de glace sur la température de la particule soulevée adiabatiquement ==
== JYG & AJ Sep 27, 2018 ==
Cette note a pour but de détailler les calculs permettant de déterminer la température d'une particule soulévée adiabatiquement lorsqu'il y a formation de glace. Elle se place dans la suite du travail d'Arnaud Jam et en particulier de son mémoire de 1998. Plus précisément, il s'agit de (re-)construire la procédure de calcul à mettre dans ündilute2" (ou dans "tlift" pour les anciennes versions) après l'appel de la procédure ïcefrac". L'idée générale dans tous ces calculs est que les particules d'air ascendant sont loin de l'équilibre et que leur phase condensée peut, à un même niveau, présenter une fraction englacée allant de 0% à 100%. La première phase du calcul ayant consisté à déterminer les caractéristiques des particules sans glace il s'agit ici de calculer la température des particules comportant la fraction englacée déterminée par la procédure ïcefrac".
On considère donc une particule de contenu en eau total $$q_t$$, dont on connait la température $$T_{p,ni}$$ et l'humidité massique $$q_{p,ni}$$ en l'absence de formation de glace (suffixe "ni" pour "no ice") et le contenu massique en glace, $$q_i$$. On se donne aussi la température $$T$$ de l'environnement au même niveau (cette température est supposée proche de la température de la particule avec glace).
On utilise les chaleurs latentes à la température $$T$$ :
{|
| vaporisation
| $$L_v = L_{v0} + (C_{pv}−C_l)(T−T_0)$$
|-
| sublimation
| $$ Ls = L_{s0} + (C_{pv}−C_i)(T−T_0)$$
|-
| fusion
| $$ L_f = L_s − L_v = L_{s0} − L_{v0} + (C_l−C_i)(T−T0) $$
|} (1)
où $$L_{v0}$$ et $$L_{s0}$$ sont les chaleurs latentes de vaporisation et de sublimation au point triple $$T_0$$ de l'eau ($$T_0$$ = 273.15 K). Les pressions de vapeur saturante, $$e_s$$ sur l'eau liquide et $$e_{si}$$ sur la glace sont données par les formules :
$$ e_s(T) = 6.112 exp[17.67 \frac{T−T_0}
{T−29.65} ]$$
$$e_{si}(T)= exp[23.33086 − \frac{6111.72784}
{T} + 0.15215 log(T)]
$$
(2)
Les graphes de ces fonctions sont portés sur la figure. Ils se croisent évidemment au point triple (T = 273.15 K, $$e_s$$ = $$e_{si}$$ = 6.112 hPa).
[[Fichier:Esesi.png]]
Figure 1: Graphes des fonctions $$e_s$$ et $$e_{si}$$.
Avec $$e_s$$ et $$e_{si}$$ on peut écrire les humidités massiques à saturation :
$$q_{sat} = \frac{ϵe_s}
{p − (1−ϵ)e_s} ≅ e_s \frac{ϵ}
{p}$$ et $$ q_{sat,i} = \frac{ϵe_{si}}
{p − (1−ϵ)e_{si}}≅ e_{si} \frac {ϵ}{p}$$
où $$ ϵ = R_d/R_v ≅ 0.62 $$ (noter que $$ q_{p,ni} = q_{sat}(T_{p,ni)})$$.
L'application de la formule de Clausius-Clapeyron donne en outre :
$$ \frac{d q_{sat,i}}{d T}(T) = \frac {L_s q_{sat,i}}{R_v T^2}$$
Les énergies statiques s'écrivent :
$$h_{p,ni} = [(1−q_t)C_{pd}+q_tC_l] T_{p,ni} + L_v q_{sat}(T_{p,ni}) + gz $$
pour la particule sans glace et
$$ h_p= [(1−q_t)C_{pd}+q_tC_l] T_p + L_v q_{sat,i}(T_p) − L_f q_i + gz $$
pour la particule avec glace.
En écrivant que l'énergie statique est conservée lors de la formation de glace, on obtient :
$$ [(1−q_t)C_{pd}+q_tC_l] T_{p,ni} + L_v q_{sat}(T_{p,ni}) = [(1−q_t)C_{pd}+q_tC_l] T_p + L_v q_{sat,i}(Tp) − L_f q_i $$
ce qui donne l'équation à résoudre en $$T_p$$ :
$$ [(1−q_t)C_{pd}+q_tC_l] (T_p − T_{p,ni}) = L_v (q_{sat}(T_{p,ni})−q_{sat,i}(T_p)) + L_f q_i$$
(3)
=== Résolution ===
On résoud l´équation par la méthode de Newton : on construit une suite $$T_j$$ partant de $$T_1 = ~T$$ et convergeant vers $$T_p$$ ; on passe de $$T_j$$ a $$T_{j+1}$$ par l'équation obtenue en linéarisant l'équation (3) :
$$ [(1−q_t)C_{pd}+q_tC_l] (T_{j+1} − T_{p,ni}) = L_v [q_{sat}(T_{p,ni}) − q_{sat,i}(T_j)− \frac{d q_{sat,i}}
{d T} (T_j)(T_{j+1}−T_j) ] + L_f q_i$$ (4)
Ce qui donne :
{|
| $$ [(1−q_t)C_{pd}+q_tC_l + L_v \frac {d q_{sat,i}} {d T}(T_j)] (T_{j+1}−T_j) $$
| $$ =[(1−q_t)C_{pd}+q-tC-l](T-{p,ni} − T_j) $$
|-
|
| $$ + L_v [q_{sat}(T_{p,ni}) − q_{sat,i}(T_j)] $$
|-
|
| $$ + L_f q_i $$
|}
(5)
soit :
$$ T_{j+1} = T_j + \frac { [(1−q_t)C_{pd}+q_tC_l](T_{p,ni} − T_j) + L_v [q_{sat}(T_{p,ni})−q_{sat,i}(T_j)] + L_f q_i}
{(1−q_t)C_{pd}+q_tC_l + L_v \frac {d q_{sat,i}}{ d T} (T_j)} $$ (6)
et, finalement, en utilisant Clausius-Clapeyron :
$$ T_{j+1} = T_j + \frac { [(1−q_t)C_{pd}+q_tC_l](T_{p,ni} − T_j) + L_v [q_{p,ni}−q_{sat,i}(T_j)] + L_f qi}
{(1−q_t)C_{pd}+q_tC_l +\frac {L_v L_s q_{sat,i}(T_j)}{ R_v T^2}} $$ (7)
=== Dans le code ===
La température de la particule avec glace $$T_p$$ ainsi que les approximations successives $$T_j$$ sont notées $$tp(i,k)$$. Les caractéristiques de la particule sans glace sont notées $$tg$$ pour $$T_{p,ni}$$ et $$qg$$ pour $$q_{p,ni}$$. L'eau totale est notées $$qnk(i)$$. Enfin la température $$T$$ de l'environnement est notée $$t(i,k)$$.
Tout cela donne la boucle :
alv=lv0-clmcpv*(t(i,k)-273.15)
alf=lf0+clmci*(t(i,k)-273.15)
als=alf+alv
tg=tp(i,k) ! On garde dans tg la temperature sans glace
tp(i,k) = t(i,k) ! L'iteration part de la temperature de l'environnement
do j=1,4
esi=exp(23.33086-(6111.72784/tp(i,k))
: +0.15215*log(tp(i,k)))
qsat_new=eps*esi/(p(i,k)-esi*(1.-eps))
snew=cpd*(1.-qnk(i))+cl*qnk(i)+alv*als*qsat_new/
: (rrv*tp(i,k)*tp(i,k))
snew=1./snew
tp(i,k)=tp(i,k)+
: ( (cpd*(1.-qnk(i))+cl*qnk(i))*(tg-tp(i,k)) +
: alv*(qg-qsat_new) + alf*qi(i,k) )*snew
enddo
L'expérience montre que l'itération converge en moins de quatre coups à mieux que 0.01 K.
=== Remarques ===
* Les formules donnant les pressions de vapeur saturante devraient s'écrire de façon plus physique :
$$ e_{s0} $$ = 6.112 hPa Pression de vapeur saturante au point triple
$$e_s(T) = e_{s0} exp[17.67 \frac{ T−T_0}{T−29.65}] $$
$$ e_{si}(T) = e_{s0} exp[−6111.72784(\frac {1}{T} − \frac{1}{T0}) + 0.15215 log(\frac{T}{T0} )]$$ (8)
Le fait que l'itération converge prouve que l'on résoud bien l'équation (3). La question est alors de savoir si l'équation (3) est bien correcte. Les doutes portent sur l'écriture de l'énergie statique (dans le rapport d'Arnaud en 1998 il y a un un signe + devant le terme $$L_f q_i$$) et sur la dépendance en température de $$L_f$$ (signe contraire pour Arnaud). Il y a aussi un doute sur l'application de la relation de Clausius-Clapeyron à la sublimation mais, comme cela ne sert qu'à la résolution de l'équation (3), c'est sans importance.
La procédure Icefrac détermine un contenu total en glace. Comme ce contenu est déterminé avant le calcul de la température, on risque d'avoir un contenu en glace supérieur au contenu condensé. Il serait plus correct que Icefrac détermine la proportion de condensat qui est sous forme glace, puis qu'on résolve l'équation en température en tenant compte de la variation du contenu total en glace. En désignant par fi la fraction de condansat qui est sous forme glace, l'équation (3) deviendrait :
$$ [(1−q_t)C_{pd}+q_tC_l] (T_p − T_{p,ni}) = L_v (q_{sat}(T_{p,ni})−q_{sat,i}(T_p)) + L_f f_i (q_t − q_{sat,i}(T_p))$$ (9)
[[Category:Notes Techniques]]
670d8a958ead63869edb6527a741c583296428c2
Accueil
0
1
94
32
2021-01-24T22:09:50Z
Lfairhead
1
/* LMDZPedia */
wikitext
text/x-wiki
= LMDZPedia =
=== Welcome to the front page of LMDZPedia, documentation, knowledge database for the LMD Atmospheric General Circulation Model LMDZ ===
[[File:Lmdzpedia.png|700px]]
''The ultimate LMDZ knowledge database''
[[Sp%c3%a9cial:Toutes_les_pages|Index des pages du site / Index of all pages on the site]]
[[Sp%c3%a9cial:Catégories|Index des catégories du site / Index of all categories on the site]]
== Pour démarrer ==
Consultez le [//meta.wikimedia.org/wiki/Help:Contents/fr Guide de l’utilisateur] pour plus d’informations sur l’utilisation de ce logiciel de wiki.
* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Liste des paramètres de configuration]
* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/fr Questions courantes sur MediaWiki]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Liste de discussion sur les distributions de MediaWiki]
* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Adaptez MediaWiki dans votre langue]
* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Apprendre comment lutter contre le pourriel dans votre wiki]
586ac00a1274aa470651873f604940e69398a00b
95
94
2021-01-24T22:10:40Z
Lfairhead
1
wikitext
text/x-wiki
= LMDZPedia =
=== Welcome to the front page of LMDZPedia, documentation, knowledge database for the LMD Atmospheric General Circulation Model LMDZ ===
[[File:Lmdzpedia.png|600px]]
''The ultimate LMDZ knowledge database''
[[Sp%c3%a9cial:Toutes_les_pages|Index des pages du site / Index of all pages on the site]]
[[Sp%c3%a9cial:Catégories|Index des catégories du site / Index of all categories on the site]]
== Pour démarrer ==
Consultez le [//meta.wikimedia.org/wiki/Help:Contents/fr Guide de l’utilisateur] pour plus d’informations sur l’utilisation de ce logiciel de wiki.
* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Liste des paramètres de configuration]
* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/fr Questions courantes sur MediaWiki]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Liste de discussion sur les distributions de MediaWiki]
* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Adaptez MediaWiki dans votre langue]
* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Apprendre comment lutter contre le pourriel dans votre wiki]
c5907fd3823e45dbe4a6d854d77bdf453df59581
96
95
2021-01-24T22:11:05Z
Lfairhead
1
/* LMDZPedia */
wikitext
text/x-wiki
= LMDZPedia =
=== Welcome to the front page of LMDZPedia, documentation, knowledge database for the LMD Atmospheric General Circulation Model LMDZ ===
[[File:Lmdzpedia.png|600px]]
''The ultimate LMDZ knowledge database''
[[Sp%c3%a9cial:Toutes_les_pages|Index des pages du site / Index of all pages on the site]]
[[Sp%c3%a9cial:Catégories|Index des catégories du site / Index of all categories on the site]]
== Pour démarrer ==
Consultez le [//meta.wikimedia.org/wiki/Help:Contents/fr Guide de l’utilisateur] pour plus d’informations sur l’utilisation de ce logiciel de wiki.
* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Liste des paramètres de configuration]
* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/fr Questions courantes sur MediaWiki]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Liste de discussion sur les distributions de MediaWiki]
* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Adaptez MediaWiki dans votre langue]
* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Apprendre comment lutter contre le pourriel dans votre wiki]
e2fc4b14264a6e7dffef5416d5f6f341b29241ee
97
96
2021-01-24T22:11:37Z
Lfairhead
1
/* Welcome to the front page of LMDZPedia, documentation, knowledge database for the LMD Atmospheric General Circulation Model LMDZ */
wikitext
text/x-wiki
= LMDZPedia =
=== Welcome to the front page of LMDZPedia ===
=== Documentation, knowledge database for the LMD Atmospheric General Circulation Model LMDZ ===
[[File:Lmdzpedia.png|600px]]
''The ultimate LMDZ knowledge database''
[[Sp%c3%a9cial:Toutes_les_pages|Index des pages du site / Index of all pages on the site]]
[[Sp%c3%a9cial:Catégories|Index des catégories du site / Index of all categories on the site]]
== Pour démarrer ==
Consultez le [//meta.wikimedia.org/wiki/Help:Contents/fr Guide de l’utilisateur] pour plus d’informations sur l’utilisation de ce logiciel de wiki.
* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Liste des paramètres de configuration]
* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/fr Questions courantes sur MediaWiki]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Liste de discussion sur les distributions de MediaWiki]
* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Adaptez MediaWiki dans votre langue]
* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Apprendre comment lutter contre le pourriel dans votre wiki]
757caea68536e26b5ef64b532de6e20416473a23
102
97
2021-02-01T10:30:08Z
Lfairhead
1
wikitext
text/x-wiki
= LMDZPedia =
=== Welcome to the front page of LMDZPedia ===
=== Documentation, knowledge database for the LMD Atmospheric General Circulation Model LMDZ ===
[[File:Lmdzpedia.png|600px|center]]
''The ultimate LMDZ knowledge database''
[[Sp%c3%a9cial:Toutes_les_pages|Index des pages du site / Index of all pages on the site]]
[[Sp%c3%a9cial:Catégories|Index des catégories du site / Index of all categories on the site]]
== Pour démarrer ==
Consultez le [//meta.wikimedia.org/wiki/Help:Contents/fr Guide de l’utilisateur] pour plus d’informations sur l’utilisation de ce logiciel de wiki.
* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Liste des paramètres de configuration]
* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/fr Questions courantes sur MediaWiki]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Liste de discussion sur les distributions de MediaWiki]
* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Adaptez MediaWiki dans votre langue]
* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Apprendre comment lutter contre le pourriel dans votre wiki]
6f71c9a24b6d232db3d04de5d1a7967dd7cbfe99
105
102
2021-09-13T13:25:33Z
Lfairhead
1
/* LMDZPedia */
wikitext
text/x-wiki
= LMDZPedia =
=== Welcome to the front page of LMDZPedia ===
=== Documentation, knowledge database for the LMD Atmospheric General Circulation Model LMDZ ===
[[File:Lmdzpedia.png|300px|center]]
''The ultimate LMDZ knowledge database''
[[Sp%c3%a9cial:Toutes_les_pages|Index des pages du site / Index of all pages on the site]]
[[Sp%c3%a9cial:Catégories|Index des catégories du site / Index of all categories on the site]]
== Pour démarrer ==
Consultez le [//meta.wikimedia.org/wiki/Help:Contents/fr Guide de l’utilisateur] pour plus d’informations sur l’utilisation de ce logiciel de wiki.
* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Liste des paramètres de configuration]
* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/fr Questions courantes sur MediaWiki]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Liste de discussion sur les distributions de MediaWiki]
* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Adaptez MediaWiki dans votre langue]
* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Apprendre comment lutter contre le pourriel dans votre wiki]
be63db3d0f9ac7682e71a01761c131d1641e5adf
HowTo: Print alert messages
0
59
108
2021-09-17T11:03:16Z
Lfairhead
1
Page créée avec « Routine 'prt_alerte' has been added to module phy_common/print_control_mod.F90 to enable developpers to print out informative messages on the first pass through physics an... »
wikitext
text/x-wiki
Routine 'prt_alerte' has been added to module phy_common/print_control_mod.F90 to enable developpers to print out informative messages on the first pass through physics and from the master process only. This can be used to remind oneself of potential problems or further enhancements.
Messages can be differentiated by a 'priority' code 0/1/2 (corresponding to GREEN/ORANGE/RED alerts)
By default, the messages are output in a file called ALERTES.txt but changing the unit number to 6 in the
print_control_mod.F90 file allows you to print out your messages to the screen.
To use you simply need to:
* have this USE statement at the start of your routine:
USE print_control_mod, ONLY: prt_level, lunout, call_alert, prt_alerte
* ensure that the modname variable is defined and contains the name of your routine
then you just need to add the following lines in your routine wherever you want to ouput your message (preferably not in a do loop)
message='your informative message'
IF (call_alert) CALL prt_alerte(message,modname,CODE)
where
message is the message to print out
modname is the routine name
CODE is an integer representing your priority code (0/1/2)
and you should get messages of the form
ALERTE ROUGE cva_driver! ym missing init, need to have a look by developpers
ALERTE VERTE orosetup_strato! ym correction en attendant mieux
in your output file.
a99b051957914ff8300ba382f52399807efd7dcb
HowTo: Print alert messages
0
59
109
108
2021-09-17T11:04:23Z
Lfairhead
1
wikitext
text/x-wiki
Routine 'prt_alerte' has been added to module phy_common/print_control_mod.F90 to enable developpers to print out informative messages on the first pass through physics and from the master process only. This can be used to remind oneself of potential problems or further enhancements.
Messages can be differentiated by a 'priority' code 0/1/2 (corresponding to GREEN/ORANGE/RED alerts)
By default, the messages are output in a file called ALERTES.txt but changing the unit number to 6 in the
print_control_mod.F90 file allows you to print out your messages to the screen.
To use you simply need to:
* have this USE statement at the start of your routine:
USE print_control_mod, ONLY: prt_level, lunout, call_alert, prt_alerte
* ensure that the modname variable is defined and contains the name of your routine
then you just need to add the following lines in your routine wherever you want to ouput your message (preferably not in a do loop)
message='your informative message'
IF (call_alert) CALL prt_alerte(message,modname,CODE)
where
message is the message to print out
modname is the routine name
CODE is an integer representing your priority code (0/1/2)
and you should get messages of the form
ALERTE ROUGE cva_driver! ym missing init, need to have a look by developpers
ALERTE VERTE orosetup_strato! ym correction en attendant mieux
in your output file.
[[Catégorie:HowTo]]
2118cc25ad8c744c0ee4cfd327f121ceb827e2e9
Outils LMDZ
0
61
111
2021-09-17T14:07:26Z
Lfairhead
1
Page créée avec « Some tools made especially for LMDZ are available at [https://lmdz.lmd.jussieu.fr/utilisateurs/utilisation-de-lmdz Boîte à outils LMDZ]. [[Category:FAQ]] Category:Env... »
wikitext
text/x-wiki
Some tools made especially for LMDZ are available at [https://lmdz.lmd.jussieu.fr/utilisateurs/utilisation-de-lmdz Boîte à outils LMDZ].
[[Category:FAQ]]
[[Category:Environnement]]
ad9e32fcae341b4d8fd458862b8d05a7f9bdf097
Whatis: the physiq.def file
0
62
112
2021-09-23T15:18:20Z
Lfairhead
1
Page créée avec « = physiq.def = The physiq.def file contains all the parameters and switches for the physical package [[Category : WhatIs]] »
wikitext
text/x-wiki
= physiq.def =
The physiq.def file contains all the parameters and switches for the physical package
[[Category : WhatIs]]
d2d7811733e483886747b0c2d1d81b8ff90f5be5
154
112
2021-11-26T07:44:18Z
Emillour
3
wikitext
text/x-wiki
= physiq.def =
The physiq.def file contains all the parameters and switches for the physical package.
In practice choosing which parametrization (and associated parameter values) to use is simply done by setting the right flags in physiq.def.
Examples of reference physiq.def files can be found in the "DefLists" subdirectory of LMDZ.
25/11/2021
[[Category : WhatIs]]
538ec7023c015204c601faecfb90fd4f25ec3254
WhatIs: The LD LIBRARY PATH environment variable
0
63
113
2021-09-24T11:55:25Z
Emillour
3
Page créée avec « When a program runs, it looks for the dynamically linked libraries (*.so files) it needs. The information on where to look for is stored in the LD_LIBRARY_PATH environmen... »
wikitext
text/x-wiki
When a program runs, it looks for the dynamically linked libraries (*.so files) it needs.
The information on where to look for is stored in the LD_LIBRARY_PATH environment variable, which contains the list of paths to scan, e.g.:
<code>LD_LIBRARY_PATH=/some/path/to/lib:/some/other/path/to/lib</code>
If the program fails to find a sought library, then it will not start and stop with an error message of the likes of:
<code>error while loading shared libraries: libnetcdff.so</code>
In the example above <ode>libnetcdf.so</code> was not found in any of the directories listed in LD_LIBRARY_PATH. Simply updating LD_LIBRARY_PATH with the correct path (for the sake of this example let's say libnetcdff.so is located in /my/personal/libraries/netcdf/lib):
<code>export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/my/personal/libraries/netcdf/lib</code>
will solve the problem. Note that you have to first update the LD_LIBRARY_PATH environment variable and the run your program.
To know which *.so libraries an executable (e.g. mycode.e) needs and where it finds them:
<code>ldd mycode.e</code>
Note that an alternative to having to specify the paths in LD_LIBRARY_PATH is to specify the path at compile time (at the linking step) using the <code>-Wl,-rpath=</code> option
[[Category:WhatIs]]
eee10d440db39bddd9e4ba9470959498c95c6e7d
122
113
2021-09-27T09:16:20Z
Emillour
3
wikitext
text/x-wiki
When a program runs, it looks for the dynamically linked libraries (*.so files) it needs.
The information on where to look for is stored in the LD_LIBRARY_PATH environment variable, which contains the list of paths to scan, e.g.:
<code>LD_LIBRARY_PATH=/some/path/to/lib:/some/other/path/to/lib</code>
If the program fails to find a sought library, then it will not start and stop with an error message of the likes of:
<code>error while loading shared libraries: libnetcdff.so</code>
In the example above <code>libnetcdf.so</code> was not found in any of the directories listed in LD_LIBRARY_PATH. Simply updating LD_LIBRARY_PATH with the correct path (for the sake of this example let's say libnetcdff.so is located in /my/personal/libraries/netcdf/lib):
<code>export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/my/personal/libraries/netcdf/lib</code>
will solve the problem. Note that you have to first update the LD_LIBRARY_PATH environment variable and the run your program.
To know which *.so libraries an executable (e.g. mycode.e) needs and where it finds them:
<code>ldd mycode.e</code>
Note that an alternative to having to specify the paths in LD_LIBRARY_PATH is to specify the path at compile time (at the linking step) using the <code>-Wl,-rpath=</code> option
[[Category:WhatIs]]
b1df6b6a4b7d22a2c65e6c0d77e5f13efd364b49
123
122
2021-09-27T09:17:01Z
Emillour
3
wikitext
text/x-wiki
When a program runs, it looks for the dynamically linked libraries (*.so files) it needs.
The information on where to look for is stored in the LD_LIBRARY_PATH environment variable, which contains the list of paths to scan, e.g.:
<code>LD_LIBRARY_PATH=/some/path/to/lib:/some/other/path/to/lib</code>
If the program fails to find a sought library, then it will not start and stop with an error message of the likes of:
<code>error while loading shared libraries: libnetcdff.so</code>
In the example above <code>libnetcdf.so</code> was not found in any of the directories listed in LD_LIBRARY_PATH. Simply updating LD_LIBRARY_PATH with the correct path (for the sake of this example let's say libnetcdff.so is located in /my/personal/libraries/netcdf/lib):
<code>export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/my/personal/libraries/netcdf/lib</code>
will solve the problem. Note that you have to first update the LD_LIBRARY_PATH environment variable and the run your program.
To know which *.so libraries an executable (e.g. mycode.e) needs and where it finds them:
<code>ldd mycode.e</code>
Note that an alternative to having to specify the paths in LD_LIBRARY_PATH is to specify the path at compile time (at the linking step) using the <code>-Wl,-rpath=</code> option
27/09/2021
[[Category:WhatIs]]
3bffcadbca5501963e53c7d1fd91b6bbd1e3a54d
HowTo: Hard code the path to a dynamic library in the executable
0
64
114
2021-09-24T12:32:02Z
Emillour
3
Page créée avec « If you don't want to use the LD_LIBRARY_PATH environment variable (this is however the recommended way to proceed) to let your executable know where to find needed dynamic... »
wikitext
text/x-wiki
If you don't want to use the LD_LIBRARY_PATH environment variable (this is however the recommended way to proceed) to let your executable know where to find needed dynamic libraries (*.so shared object libraries), you can hard code the paths at compile (linking) time, with the <code>-Wl,rpath=</code> option.
== general illustrative example ==
You want your executable to always first look for the needed library in /my/personal/stuff/lib and /some/other/place/lib , then compile with:
<code>-Wl,rpath=/my/personal/stuff/lib:/some/other/place/lib</code>
The drawback of this method is that if the libraries are later moved to different locations, your executable won't know about it and probably abort with an error message of the likes of:
<code>error while loading shared libraries: ...</code>
== LMDZ-specific example ==
Since compilation options are set in the arch.fcm file, this is where the option <code>-Wl,rpath=...</code> should be set, on the line starting with <code>%BASE_LD</code>
For example if one wants to hard code to look for personal netcdf libraries that are located in /my/personal/netcdf/lib:
<code>%BASE_LD -Wl,-rpath=/my/personal/netcdf/lib
[[Category:HowTo]]
703683a6206a7e2c235119fadb49199e83639692
124
114
2021-09-27T09:22:44Z
Lfairhead
1
wikitext
text/x-wiki
If you don't want to use the LD_LIBRARY_PATH environment variable (this is however the recommended way to proceed) to let your executable know where to find needed dynamic libraries (*.so shared object libraries), you can hard code the paths at compile (linking) time, with the <code>-Wl,rpath=</code> option.
== general illustrative example ==
You want your executable to always first look for the needed library in /my/personal/stuff/lib and /some/other/place/lib , then compile with:
<code>-Wl,rpath=/my/personal/stuff/lib:/some/other/place/lib</code>
The drawback of this method is that if the libraries are later moved to different locations, your executable won't know about it and probably abort with an error message of the likes of:
<code>error while loading shared libraries: ...</code>
== LMDZ-specific example ==
Since compilation options are set in the [[WhatIs:_The_target_architecture_("arch")_files|arch.fcm]] file, this is where the option <code>-Wl,rpath=...</code> should be set, on the line starting with <code>%BASE_LD</code>
For example if one wants to hard code to look for personal netcdf libraries that are located in /my/personal/netcdf/lib:
<code>%BASE_LD -Wl,-rpath=/my/personal/netcdf/lib
[[Category:HowTo]]
e9f70d8edf3e8d514ccf8b986d23326f213d6558
Catégorie:Parallel
14
65
115
2021-09-27T09:03:58Z
Lfairhead
1
Page créée avec « Pour ranger tout ce qui a trait au parallélisme dans LMDZ »
wikitext
text/x-wiki
Pour ranger tout ce qui a trait au parallélisme dans LMDZ
8dfae98fb1f83efc69640fb4992a1665e2115212
Catégorie:Xios
14
66
116
2021-09-27T09:04:35Z
Lfairhead
1
Page créée avec « Pour tout ce qui a trait à XIOS dans LMDZ »
wikitext
text/x-wiki
Pour tout ce qui a trait à XIOS dans LMDZ
5154deb5ac4026c71e29eec8219ddc0a0720b702
XIOS : "something must be wrong with mask index"
0
40
118
72
2021-09-27T09:09:45Z
Emillour
3
wikitext
text/x-wiki
Dans une simulation avec XIOS et LMDZ, XIOS affiche les messages suivants :
info : If domain dom_out does not have overlapped regions between processes something must be wrong with mask index
Vous pouvez ignorer ce message. Dans le cas de LMDZ, on a bien de "l'overlap" entre les domaines de sortie, donc pas de soucis. C'est une mise en garde plus pour les développeurs. Si effectivement on n'a pas de recouvrement entre les domaines, ce message peut être le signe d'un problème lors du calcul des index de transfert entre clients et serveurs.
[[Category:FAQ]]
[[Category:ErrorMessages]]
[[Category:xios]]
a00aeb885826724eead2f4e6351477e869bb8aad
141
118
2021-11-15T07:36:12Z
Emillour
3
wikitext
text/x-wiki
In a simulation using XIOS et LMDZ in client-server mode, XIOS may generate the following message :
<code>
info : If domain dom_out does not have overlapped regions between processes something must be wrong with mask index
</code>
It is a harmless warning message, mainly for developers. It is just that with LMDZ there can be some overlap between output domains.
If however you are in a situation where you know there is no overlap between domains, then this message indicates that something must be wrong in the computation of transfer indexes between clients and servers.
[[Category:FAQ]]
[[Category:ErrorMessages]]
[[Category:xios]]
259fcf3cc9f905283643c1852e8adec14313d5f9
Nombre de variables trop grand dans un fichier d'historique, avec XIOS
0
41
119
73
2021-09-27T09:11:13Z
Emillour
3
wikitext
text/x-wiki
Symptôme :
terminate called after throwing an instance of 'xios::CNetCdfException'
what(): Error when calling function nc_enddef(ncId)
NetCDF: HDF error
Unable to end define mode of this file, given its id: 65536
Program received signal SIGABRT: Process abort signal.
Ce problème peut se poser avec XIOS quand on augmente par exemple le niveau de sortie d'un fichier d'historique.
C'est un problème de netcdf4 + HDF5 en mode écriture parallèle. Pour une raison obscure, lorsqu'on tente de déclarer trop de champs avec trop de méta-données, une erreur se produit au moment de nc_enddef. C'est un problème de longue date qui combine le nombre de champs, associé à leurs tailles et au volume de méta-données, sans qu'il y ait pour autant une règle claire.
Les work-arounds :
* mettre moins de variables par fichier : baisser le niveau ou regrouper les variables par niveau dans un même fichier
* utiliser la version séquentielle qui fonctionne on ne sait pas trop pourquoi : avoir un seul processus ou un seul serveur XIOS ou utiliser les deux niveaux de serveur qui font des écritures séquentielles au final.
* utiliser pnetcdf (format classique) au lieu de netcdf4+HDF5 avec XIOS.
Je sais, c'est un peu lourd, mais on n'a pas vraiment le choix que de s'adapter à cette contrainte pour le moment, qui sera peut-être levée un jour.
[[Category:FAQ]]
[[Category:ErrorMessages]]
[[Category:xios]]
2f90d1b1a71640468c851bce25a91f4d1b06f7dc
Catégorie:ErrorMessages
14
68
120
2021-09-27T09:11:21Z
Lfairhead
1
Page créée avec « Exemple de messages d'erreur rencontrés dans LMDZ et des idées sur comment les résoudre »
wikitext
text/x-wiki
Exemple de messages d'erreur rencontrés dans LMDZ et des idées sur comment les résoudre
05ef6790c4cedf4384e0e4f77ed4205436b29509
121
120
2021-09-27T09:12:03Z
Lfairhead
1
wikitext
text/x-wiki
Exemple de messages d'erreur rencontrés dans LMDZ et des idées sur comment les résoudre
[[Category:FAQ]]
bde28589905bd960c52c73ed27173a479de53cda
WhatIs: The target architecture ("arch") files
0
30
125
57
2021-09-27T09:24:56Z
Lfairhead
1
wikitext
text/x-wiki
== A brief description of the architecture files used by the makelmdz_fcm script ==
The target architecture files are files used by the makelmdz_fcm compilation script. These files contain all the necessary information about the local environment, where libraries are located, which compiler, and compiler options will be used, etc.
In practice, when the [[WhatIs:_The_makelmdz_fcm_script|makelmdz_fcm]] is run with "-arch somename", it will look for files "arch-somename.env", "arch-somename.path" and "arch-somename.fcm" (obviously "somename" can be any string, makelmdz_fcm will adapt the arch file names it seeks) in the LMDZ/arch subdirectory. and link these as "arch.env", "arch.path" and "arch.env" in the LMDZ directory. Re-running makelmdz_fcm with a different argument to the "-arch" option will update these links.
'''The arch.env file'''
This file is optional. It should contain instructions and declarations related to the environment (e.g. setting up environment variables, or loading modules), necessary prerequisites to compiling LMDZ. For example the "arch/arch-gfortran_CICLAD.env" file that contains:
module unload openmpi
module load openmpi/1.4.5-gfortran
module unload netcdf4
module load netcdf4/4.2.1.1-gfortran
export NETCDF_HOME=/opt/netcdf42/gfortran
imposes first running some "module" commands and setting the environment variable "NETCDF_HOME" prior to the compilation.
'''The arch.path file'''
This file contains information about the paths (relative to the LMDZ directory) and options concerning libraries (NetCDF, IOIPSL, etc.) required to compile LMDZ. For example the "arch/arch-gfortran_CICLAD.path" contains:
NETCDF_LIBDIR="-L${NETCDF_HOME}/lib -lnetcdf -lnetcdff"
NETCDF_INCDIR=-I${NETCDF_HOME}/include
IOIPSL_INCDIR=$LMDGCM/../../lib
IOIPSL_LIBDIR=$LMDGCM/../../lib
ORCH_INCDIR=$LMDGCM/../../lib
ORCH_LIBDIR=$LMDGCM/../../lib
OASIS_INCDIR=$LMDGCM/../../prism/SX/build/lib/psmile.$couple
OASIS_LIBDIR=$LMDGCM/../../prism/SX/lib
INCA_LIBDIR=$LMDGCM/../INCA/config/lib
INCA_INCDIR=$LMDGCM/../INCA/config/lib
XIOS_INCDIR=$LMDGCM/../XIOS/inc
XIOS_LIBDIR=$LMDGCM/../XIOS/lib
Here the keywords are quite self-explanatory, for each external library, NetCDF, IOIPSL, XIOS, ... one provide the compiling intructions about related "include" directories along with the path to the libraries.
'''The arch.fcm file'''
This file contains information about the compiler to use and compiler options to set. Each line starts with a reserved keyword, followed by the appropriate specifications. For example the "arch/arch-gfortran_CICLAD.fcm" file contains:
%COMPILER $MPI_BIN/mpif90
%LINK $MPI_BIN/mpif90
%AR ar
%ARFLAGS rs
%MAKE gmake
%FPP_FLAGS -P -traditional
%FPP_DEF NC_DOUBLE
%BASE_FFLAGS -c -fdefault-real-8 -fcray-pointer -frecursive -ffree-line-length-0 -fno-align-commons
%PROD_FFLAGS -O3
%DEV_FFLAGS -O -Wall -fbounds-check
%DEBUG_FFLAGS -ffpe-trap=invalid,zero,overflow -Wall -fbounds-check -g3 -O0 -fstack-protector-all -fbacktrace
%MPI_FFLAGS
%OMP_FFLAGS -fopenmp
%BASE_LD -Wl,-rpath=$NETCDF_HOME/lib
%MPI_LD
%OMP_LD -fopenmp
Implying that the compiler to use is "mpif90", located in "$MPI_BIN/mpif90" (here $MPI_BIN is an environment variable that has been set via the "module load openmpi/1.4.5-gfortran" command from the corresponding arch-gfortran_CICLAD.env file), that compilation will always include the "-c -fdefault-real-8 -fcray-pointer -frecursive ffree-line-length-0 -fno-align-commons" options, etc.
The meaning of the various keywords in the arch.fcm file are:
* %COMPILER: The compiler to use
* %LINK: The linker to use (usually this is the same as the compiler)
* %AR: the archiving tool (to collect objects and build the library, typically "ar")
* %ARFLAGS: options to give to the archiving tool
* %FPP_FLAGS: options to pass to the preprocessor of the Fortan source code
* %FPP_DEF: preprocessing flags to set
* %BASE_FFLAGS: compilation flags to alway include when compiling the source code
* %PROD_FFLAGS: compilation flags to include if makelmdz_fcm is run with the "-prod" option
* %DEV_FFLAGS: compilation flags to include if makelmdz_fcm is run with the "-dev" option
* %DEBUG_FFLAGS: compilation flags to include if makelmdz_fcm is run with the "-debug" option
* %MPI_FFLAGS: compilation flags to include if makelmdz_fcm is run with the "-parallel mpi" or "-parallel mpi_omp" options (i.e. to have a code that can run in MPI)
* %OMP_FFLAGS: compilation flags to include if makelmdz_fcm is run with the "-parallel omp" or "-parallel mpi_omp" options (i.e. to have a code that can run in OpenMP)
* %BASE_LD: flags to add when running the linker
* %MPI_LD: flags to add when running the linker when MPI is enabled
* %OMP_LD: flags to add when running the linker when OpenMP is enabled
13/05/2020
[[Category:WhatIs]]
a564335374f8c087b9a0d8a19694db92f24d9817
Accueil
0
1
126
105
2021-09-27T09:32:47Z
Lfairhead
1
wikitext
text/x-wiki
= LMDZPedia =
=== Welcome to the front page of LMDZPedia ===
=== Documentation, knowledge database for the LMD Atmospheric General Circulation Model LMDZ ===
[[File:Lmdzpedia.png|300px|center]]
''The ultimate LMDZ knowledge database''
* SEARCH
[[Sp%c3%a9cial:Toutes_les_pages|Index des pages du site / Index of all pages on the site]]
[[Sp%c3%a9cial:Catégories|Index des catégories du site / Index of all categories on the site]]
== Pour démarrer ==
Consultez le [//meta.wikimedia.org/wiki/Help:Contents/fr Guide de l’utilisateur] pour plus d’informations sur l’utilisation de ce logiciel de wiki.
* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Liste des paramètres de configuration]
* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/fr Questions courantes sur MediaWiki]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Liste de discussion sur les distributions de MediaWiki]
* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Adaptez MediaWiki dans votre langue]
* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Apprendre comment lutter contre le pourriel dans votre wiki]
63a240159b27403396ec5a1739166254f01557b8
127
126
2021-09-27T09:34:00Z
Lfairhead
1
wikitext
text/x-wiki
= LMDZPedia =
=== Welcome to the front page of LMDZPedia ===
=== Documentation, knowledge database for the LMD Atmospheric General Circulation Model LMDZ ===
[[File:Lmdzpedia.png|300px|center]]
''The ultimate LMDZ knowledge database''
Utiliser la recherche en haut à droite / Use search box on top right
[[Sp%c3%a9cial:Toutes_les_pages|Index des pages du site / Index of all pages on the site]]
[[Sp%c3%a9cial:Catégories|Index des catégories du site / Index of all categories on the site]]
== Pour démarrer ==
Consultez le [//meta.wikimedia.org/wiki/Help:Contents/fr Guide de l’utilisateur] pour plus d’informations sur l’utilisation de ce logiciel de wiki.
* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Liste des paramètres de configuration]
* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/fr Questions courantes sur MediaWiki]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Liste de discussion sur les distributions de MediaWiki]
* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Adaptez MediaWiki dans votre langue]
* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Apprendre comment lutter contre le pourriel dans votre wiki]
0400bb9bb7540e91ee9f836d314cde6ba103bdea
128
127
2021-09-28T15:05:35Z
Lfairhead
1
wikitext
text/x-wiki
= LMDZPedia =
=== Welcome to the front page of LMDZPedia ===
=== Documentation, knowledge database for the LMD Atmospheric General Circulation Model LMDZ ===
[[File:Lmdzpedia.png|300px|center]]
''The ultimate LMDZ knowledge database''
<inputbox>
type=search2
break=no
placeholder=Search this Wiki
</inputbox>
[[Sp%c3%a9cial:Toutes_les_pages|Index des pages du site / Index of all pages on the site]]
[[Sp%c3%a9cial:Catégories|Index des catégories du site / Index of all categories on the site]]
==== Pour les contributeurs ====
Consultez le [//meta.wikimedia.org/wiki/Help:Contents/fr Guide de l’utilisateur] pour plus d’informations sur l’utilisation de ce logiciel de wiki.
* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Liste des paramètres de configuration]
* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/fr Questions courantes sur MediaWiki]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Liste de discussion sur les distributions de MediaWiki]
* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Adaptez MediaWiki dans votre langue]
* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Apprendre comment lutter contre le pourriel dans votre wiki]
<br>
<div style="float:{left}; width:12em">
<inputbox>
type=create
break=no
buttonlabel=Créer une nouvelle page
</inputbox>
</div>
f5d46d732860427366a6e64b0e1bef0b94809d1c
129
128
2021-09-28T15:25:58Z
Lfairhead
1
wikitext
text/x-wiki
= LMDZPedia =
=== Welcome to the front page of LMDZPedia ===
=== Documentation, knowledge database for the LMD Atmospheric General Circulation Model LMDZ ===
[[File:Lmdzpedia.png|300px|center]]
''The ultimate LMDZ knowledge database''
Search / Chercher : <inputbox>
type=search2
inline=true
width=10
</inputbox>
[[Sp%c3%a9cial:Toutes_les_pages|Index des pages du site / Index of all pages on the site]]
[[Sp%c3%a9cial:Catégories|Index des catégories du site / Index of all categories on the site]]
==== Pour les contributeurs ====
Consultez le [//meta.wikimedia.org/wiki/Help:Contents/fr Guide de l’utilisateur] pour plus d’informations sur l’utilisation de ce logiciel de wiki.
* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Liste des paramètres de configuration]
* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/fr Questions courantes sur MediaWiki]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Liste de discussion sur les distributions de MediaWiki]
* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Adaptez MediaWiki dans votre langue]
* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Apprendre comment lutter contre le pourriel dans votre wiki]
<br>
<div style="float:{left}; width:12em">
<inputbox>
type=create
break=no
buttonlabel=Créer une nouvelle page
</inputbox>
</div>
80631d8433a47b8b034a8e1e19c85e7639c6515e
130
129
2021-09-28T15:28:39Z
Lfairhead
1
wikitext
text/x-wiki
= LMDZPedia =
=== Welcome to the front page of LMDZPedia ===
=== Documentation, knowledge database for the LMD Atmospheric General Circulation Model LMDZ ===
[[File:Lmdzpedia.png|300px|center]]
''The ultimate LMDZ knowledge database''
<inputbox>
type=fulltext
inline=true
width=50
placeholder=Search this Wiki
</inputbox>
[[Sp%c3%a9cial:Toutes_les_pages|Index des pages du site / Index of all pages on the site]]
[[Sp%c3%a9cial:Catégories|Index des catégories du site / Index of all categories on the site]]
==== Pour les contributeurs ====
Consultez le [//meta.wikimedia.org/wiki/Help:Contents/fr Guide de l’utilisateur] pour plus d’informations sur l’utilisation de ce logiciel de wiki.
* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Liste des paramètres de configuration]
* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/fr Questions courantes sur MediaWiki]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Liste de discussion sur les distributions de MediaWiki]
* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Adaptez MediaWiki dans votre langue]
* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Apprendre comment lutter contre le pourriel dans votre wiki]
<br>
<div style="float:{left}; width:12em">
<inputbox>
type=create
break=no
buttonlabel=Créer une nouvelle page
</inputbox>
</div>
d08f9f0105b494bd94f02153d044384f59bbd4b7
Whatis: the libf directory
0
69
131
2021-10-14T13:08:11Z
Emillour
3
Page créée avec « The LMDZ source Fortran code is located under the libf directory of the root LMDZ directory. The various directories (and their respective subdirectories) are there to s... »
wikitext
text/x-wiki
The LMDZ source Fortran code is located under the libf directory of the root LMDZ directory.
The various directories (and their respective subdirectories) are there to
separate codes with various functionalities. The main driver in this
organization is to cleanly separate dynamics, physics and their
interface. In practice:
== dynamics solver related subdirectories ==
'''dyn3d''' : dynamics, serial version
'''dyn3dpar''' : dynamics, parallel version. Obsolete (many arrays remained global requiring more overall memory with increasing core number)
'''dyn3dmem''' : dynamics, parallel (optimized) version with improved memory management (all arrays are local to each core)
'''dyn3d_common''' : routines used by all dynamics (serial or parallel)
'''filtre''' : high-latitude longitudinal filter for lonxlat grid (used by the dynamics, serial or parallel)
'''grid''' : routine for model's grid generation (used by the dynamics, serial or parallel)
== physics packages related subdirectories ==
'''phy*''' : various physics packages:
- phylmd: standard terrestrial lmd physics
- phylmdiso: version with isotopes (temporary, should be merged in phylmd)
- phymar: physics of the 'modele atmospherique regional', obsolete
- phydev: 'physics that does nothing but does it well'
'''phy_common''' : common routines to all physics (different modules for parallelism, abort_physics, geometry, getin wrapper, ...)
== physics-dynamics interface ==
'''dynphy_lonlat''': contains the dynamics/physics interface with at a first level common routines to all physics and dedicated specific routines for each physics (e.g., call physics + physics initialization) in a subdirectory of the same name as the physics package's (phylmd, phydev, ...).
In addition the subdirectory stores main programs, other than the gcm, which require access to both physics and dynamics routines (e.g. to generate initial states, such as ce0l).
Note that if a physics package name is an extension of an already existing physics package (e.g. phylmdiso and phylmd) then they share the same interface (phylmd here).
'''phy*/dyn1d''': the 1D model (and links to some required dyn3d/* routines)
== others ==
'''misc''': (misceallenous) dynamics and physics independent routines which can be used by either but rely on neither (e.g. random number generator, tridiagonal matrix solver, NetCDF function wrappers, CRAY-specific routines, ...)
obsolete: obsolete code not used anymore but moved and stored here for an easy quick look.
14/10/2021
[[Category:WhatIs]]
3ac464ae98456971f51bd6b99c95c5e1df5b60f0
WhatIs: the ioipsl library
0
70
132
2021-10-18T07:38:02Z
Emillour
3
Page créée avec « The IOIPSL (for Input Output IPSL) library is a library used by LMDZ to read in input parameters (from the run.def text file and related *.def files) and write output NetC... »
wikitext
text/x-wiki
The IOIPSL (for Input Output IPSL) library is a library used by LMDZ to read in input parameters (from the run.def text file and related *.def files) and write output NetCDF files (histmth.nc, histins.nc, etc.) at runtime.
Although still quite functionnal, use of IOIPSL to generate output files is now depreciated in favor of the XIOS library.
18/10/2021
[[Category:WhatIs]]
be4d81ce1c78da7ab3a15c0a0cfa40a7707fa9be
140
132
2021-11-15T07:28:30Z
Emillour
3
wikitext
text/x-wiki
The IOIPSL (for Input Output IPSL) library is a library used by LMDZ to read in input parameters (from the run.def text file and related *.def files) and write output NetCDF files (histmth.nc, histins.nc, etc.) at runtime.
Note that when running in parallel (MPI), each process will generate each its own set of output files: histmth_0000.nc, histins_0000.nc, etc. for process number 0, histmth_0001.nc, histins_0001.nc, etc. for process number 1, and so on. Once the run is finished it is up to the user to recombine these hist*_*.nc files into single files gathering the data over the entire planet, using the IOIPSL ''rebuild'' script, e.g.:
<code>rebuild histmth.nc histmth_*.nc</code>
Although still quite functional, use of IOIPSL to generate output files is now depreciated in favor of the XIOS library.
15/11/2021
[[Category:WhatIs]]
48a6743e2d1dcfa1541d30269e479d413fbfd167
Halos
0
3
133
39
2021-11-04T07:30:07Z
Emillour
3
wikitext
text/x-wiki
== Warning: Quite technical stuff here!!! ==
In the dynamics, the MPI/OpenMP assigned domains to a each core can be hard to keep up with... especially as it also depends on the grid (scalar, U, V) a given variable is
Some nomenclature:
* ijb_u => "ij": linear index (horizontal grid) "b": begin (i.e. index at which the domain starts) "_u": U grid
* ije_u => "ij": linear index (horizontal grid) "e": end (i.e. index at which the domain ends) "_u": U grid
* ijb_v => "ij": linear index (horizontal grid) "b": begin (i.e. index at which the domain starts) "_v": V grid
* ije_v => "ij": linear index (horizontal grid) "e": end (i.e. index at which the domain ends) "_v": V grid
These boundaries include halos (i.e. neighboring values at the junction with adjacent domains), whereas the ij_begin and ij_end don't
(see parallel_lmdz.F90).
Scalars, which are not technically on the U grid, but on a grid with identical dimensions, are indexed as if they were on the U grid.
The Register_SwapField routines copy the inner boundary values of a domain to propagate them to the other domains and fill their respective halos.
04/11/2021
[[Category:Parallel]]
c9898b7d69a833cf8576e8422fb7dc90dbec8745
134
133
2021-11-04T10:28:27Z
Emillour
3
wikitext
text/x-wiki
== Warning: Quite technical stuff here!!! ==
In the dynamics, the MPI assigned domains to a each core can be hard to track of... especially as it also depends on the grid (scalar, U, V) a given variable is
Some nomenclature:
* jjb_u,jje_u => "latitudinal indexes", for a variable on the (iip1,jj_b:jj_e) horizontal grid U grid
* jjb_v,jje_v => "latitudinal indexes", for a variable on the (iip1,jj_b:jj_e) horizontal grid V grid
* ijb_u => "ij": linear index (horizontal grid) "b": begin (i.e. index at which the domain starts) "_u": U grid
* ije_u => "ij": linear index (horizontal grid) "e": end (i.e. index at which the domain ends) "_u": U grid
* ijb_v => "ij": linear index (horizontal grid) "b": begin (i.e. index at which the domain starts) "_v": V grid
* ije_v => "ij": linear index (horizontal grid) "e": end (i.e. index at which the domain ends) "_v": V grid
These boundaries include halos (i.e. neighboring values at the junction with adjacent domains), whereas the ij_begin and ij_end don't
(see parallel_lmdz.F90).
Scalars, which are not technically on the U grid, but on a grid with identical dimensions, are indexed as if they were on the U grid.
The Register_SwapField routines copy the inner boundary values of a domain to propagate them to the other domains and fill their respective halos.
04/11/2021
[[Category:Parallel]]
48aabb297a2587f0bef040d30a55e342ffa7f28a
135
134
2021-11-04T10:29:16Z
Emillour
3
wikitext
text/x-wiki
== Warning: Quite technical stuff here!!! ==
In the dynamics, the MPI assigned domains to a each core can be hard to track of... especially as it also depends on the grid (scalar, U, V) a given variable is
Some nomenclature:
* jjb_u, jje_u => "latitudinal indexes", for a variable on the (iip1,jjb_u:jje_u) horizontal grid U grid
* jjb_v, jje_v => "latitudinal indexes", for a variable on the (iip1,jjb_v:jje_v) horizontal grid V grid
* ijb_u => "ij": linear index (horizontal grid) "b": begin (i.e. index at which the domain starts) "_u": U grid
* ije_u => "ij": linear index (horizontal grid) "e": end (i.e. index at which the domain ends) "_u": U grid
* ijb_v => "ij": linear index (horizontal grid) "b": begin (i.e. index at which the domain starts) "_v": V grid
* ije_v => "ij": linear index (horizontal grid) "e": end (i.e. index at which the domain ends) "_v": V grid
These boundaries include halos (i.e. neighboring values at the junction with adjacent domains), whereas the ij_begin and ij_end don't
(see parallel_lmdz.F90).
Scalars, which are not technically on the U grid, but on a grid with identical dimensions, are indexed as if they were on the U grid.
The Register_SwapField routines copy the inner boundary values of a domain to propagate them to the other domains and fill their respective halos.
04/11/2021
[[Category:Parallel]]
06add725cadf9fedae451f9ef3541629ffcf6b50
146
135
2021-11-17T12:51:38Z
Emillour
3
wikitext
text/x-wiki
== Warning: Quite technical stuff here!!! ==
In the dynamics, the MPI assigned domains to a each core can be hard to track of... especially as it also depends on the grid (scalar, U, V) a given variable is
Some nomenclature:
* jjb_u, jje_u => "latitudinal indexes", for a variable on the (iip1,jjb_u:jje_u) horizontal grid U grid
* jjb_v, jje_v => "latitudinal indexes", for a variable on the (iip1,jjb_v:jje_v) horizontal grid V grid
* ijb_u => "ij": linear index (horizontal grid) "b": begin (i.e. index at which the domain starts) "_u": U grid
* ije_u => "ij": linear index (horizontal grid) "e": end (i.e. index at which the domain ends) "_u": U grid
* ijb_v => "ij": linear index (horizontal grid) "b": begin (i.e. index at which the domain starts) "_v": V grid
* ije_v => "ij": linear index (horizontal grid) "e": end (i.e. index at which the domain ends) "_v": V grid
These boundaries include halos (i.e. neighboring values at the junction with adjacent domains), whereas the ij_begin and ij_end don't
(see parallel_lmdz.F90).
Scalars, which are not technically on the U grid, but on a grid with identical dimensions, are indexed as if they were on the U grid.
The Register_SwapField routines copy the inner boundary values of a domain to propagate them to the other domains and fill their respective halos.
04/11/2021
[[Category:Parallel]]
[[Category:ExpertDev]]
1cd8f9ad517c82e9244705678d5fd3b8cd7c6733
WhatIs: The ngroup parameter
0
71
136
2021-11-05T16:55:36Z
Emillour
3
Page créée avec « The "ngroup" parameter (which one would set in the gcm.def file and has otherwise a default value of 3) is a parameter concerning a specific "filtering" near the poles (wh... »
wikitext
text/x-wiki
The "ngroup" parameter (which one would set in the gcm.def file and has otherwise a default value of 3) is a parameter concerning a specific "filtering" near the poles (which helps stabilizing the model). In practice it is applied to the divergence of air transport (pbaru/v) and of tracers, by grouping meshes in longitudes two by two, assuming a constant divergence in grouped meshes.
Longitudinal grouping of meshes is such that it increases as one reaches the poles, doubling at each new latitude (i.e. groups of 2,...,2**ngroup).
To put it a different way, starting from the pole, groups of 2**ngroup are made (i.e. 8 if ngroup==3 or 16 if ngroup==4, which also implies that the number of grid points along longitudes must be a multiple of 2**ngroup), then at the next latitude band groups of 2**(ngroup-1) are used (i.e. 4 if ngrou==3 or 8 if ngroup==4), followed at the next latitude band groups of 2**(ngroup-2), etc. until no grouping remains to be done.
== Recommended values of ngroup ==
A general rule of thumb :
* for horizontal grids of the order of up to 180x90, ngroup=3 is fine
* for horizontal grids of the order of 256x256 or 360x180, ngroup=4 seems better (stabilizing)
* for horizontal grids of 720x360, ngroup=5 is likely better
30/10/2021
[[Category:WhatIs]]
[[Category:Inputs]]
a67d730b7a160d3bf8aec9ce4421ade0f167a454
137
136
2021-11-05T16:56:26Z
Emillour
3
wikitext
text/x-wiki
The "ngroup" parameter (which one would set in the gcm.def file and has otherwise a default value of 3) is a parameter concerning a specific "filtering" near the poles (which helps stabilizing the model). In practice it is applied to the divergence of air transport (pbaru/v) and of tracers, by grouping meshes in longitudes two by two, assuming a constant divergence in grouped meshes.
Longitudinal grouping of meshes is such that it increases as one reaches the poles, doubling at each new latitude (i.e. groups of 2,...,2**ngroup).
To put it a different way, starting from the pole, groups of 2**ngroup are made (i.e. 8 if ngroup==3 or 16 if ngroup==4, which also implies that the number of grid points along longitudes must be a multiple of 2**ngroup), then at the next latitude band groups of 2**(ngroup-1) are used (i.e. 4 if ngroup==3 or 8 if ngroup==4), followed at the next latitude band groups of 2**(ngroup-2), etc. until no grouping needs to be done.
== Recommended values of ngroup ==
A general rule of thumb :
* for horizontal grids of the order of up to 180x90, ngroup=3 is fine
* for horizontal grids of the order of 256x256 or 360x180, ngroup=4 seems better (stabilizing)
* for horizontal grids of 720x360, ngroup=5 is likely better
30/10/2021
[[Category:WhatIs]]
[[Category:Inputs]]
ce092aefdb9b03aeda0b31809251c5e46f58334a
Catégorie:Inputs
14
72
138
2021-11-05T16:57:40Z
Emillour
3
Page créée avec « Inputs (files and parameters) used by the GCM »
wikitext
text/x-wiki
Inputs (files and parameters) used by the GCM
4d93a639e5270f881ffa17ba93760f1705ce6cbc
WhatIs: The Bands *.dat file
0
33
139
60
2021-11-11T17:58:56Z
Emillour
3
wikitext
text/x-wiki
== What is the Bands_*.dat file produced by LMDZ at run-time ==
When it is run in parallel (using MPI), LMDZ looks for a file in the current directory that is called "Bands_IIMxJJMxLLMxN.dat", where IIM,JJM,LLM are the model's horizontal and vertical resolution (same as when compiling) and N is the number of MPI processes to use.
If there is no "Bands_IIMxJJMxLLMxN.dat", then a default one is created at run-time.
Content of the "Bands_IIMxJJMxLLMxN.dat" file:
It consists of 4 sections of 2 columns each: the first column contains the MPI process number and the second the number of latitude bands (or columns, for section 4) that are assigned to it. The first section is relative to computations in the dynamics, the second to tracer advection (in the dynamics), the third to dissipation (also in the dynamics) and the fourth to physics.
[[Category:WhatIs]]
[[Category:Parallel]]
3b3f08fea546b9b67d4039bafd37c8c05eb60a29
HowTo: debug the quality control
0
73
142
2021-11-16T14:25:47Z
Lfairhead
1
Page créée avec « As explained on https://lmdz.lmd.jussieu.fr/le-coin-des-developpeurs/controle-qualite, a number of quality control checks of the code are run every night to ensure that no... »
wikitext
text/x-wiki
As explained on https://lmdz.lmd.jussieu.fr/le-coin-des-developpeurs/controle-qualite, a number of quality control checks of the code are run every night to ensure that nothing was broken by the most recent commits to the svn depository (note that only the trunk version of the code is tested by this procedure).
This note explains what to do if those regular tests reveal that the code is broken.
The checks are launched by the [https://www.lmd.jussieu.fr/~lmdz/Distrib/creation_modipsl.sh following script] which prepares the distribution version of the code and then lauches the [https://www.lmd.jussieu.fr/~lmdz/Distrib/check_version.sh script] that actually launches the quality checks. The results of the tests are synthesized in one line and recorded in the following file https://www.lmd.jussieu.fr/~lmdz/pub/LISMOI.trunk. Each line of this file (besides the comments) gives the version of the code being tested, its corresponding svn revision number and the results of the different checks (as explained in the file and the webpage given above [https://lmdz.lmd.jussieu.fr/le-coin-des-developpeurs/controle-qualite]
=== How to debug a failed quality check ===
Once a failed quality check is established, one should look in the LISMOI.trunk file [https://www.lmd.jussieu.fr/~lmdz/pub/LISMOI.trunk] to find out which version of the code caused a problem (for example 20211105.trunk). One can then find the output of the quality control check in the
lmdz-cq:/tmp/lmdz/LMDZ20211105.trunk
directory with the actual output file of the check_version.sh script in
lmdz-cq:~lmdz/WWW/Distrib/WORK/check.out.20211105.trunk
One can then go through the check_version.sh script [https://www.lmd.jussieu.fr/~lmdz/Distrib/check_version.sh] comparing with the different output to find out what went wrong. Tests of correction can actually be done in the
lmdz-cq:/tmp/lmdz/LMDZ20211105.trunk
directory.
de964ac3865d435265290da68694b2d7d0bfc375
143
142
2021-11-16T14:33:35Z
Lfairhead
1
wikitext
text/x-wiki
As explained on https://lmdz.lmd.jussieu.fr/le-coin-des-developpeurs/controle-qualite, a number of quality control checks of the code are run every night to ensure that nothing was broken by the most recent commits to the svn depository (note that only the trunk version of the code is tested by this procedure).
This note explains what to do if those regular tests reveal that the code is broken.
The checks are launched by the [https://www.lmd.jussieu.fr/~lmdz/Distrib/creation_modipsl.sh following script] which prepares the distribution version of the code and then lauches the [https://www.lmd.jussieu.fr/~lmdz/Distrib/check_version.sh script] that actually launches the quality checks. The results of the tests are synthesized in one line and recorded in the following file https://www.lmd.jussieu.fr/~lmdz/pub/LISMOI.trunk. Each line of this file (besides the comments) gives the version of the code being tested, its corresponding svn revision number and the results of the different checks (as explained in the file and the webpage given above [https://lmdz.lmd.jussieu.fr/le-coin-des-developpeurs/controle-qualite]
=== How to debug a failed quality check ===
Once a failed quality check is established, one should look in the LISMOI.trunk file [https://www.lmd.jussieu.fr/~lmdz/pub/LISMOI.trunk] to find out which version of the code caused a problem (for example 20211105.trunk). One can then find the output of the quality control check in the
lmdz-cq:/tmp/lmdz/LMDZ[version_number]
directory with the actual output file of the check_version.sh script in
lmdz-cq:~lmdz/WWW/Distrib/WORK/check.out.[version_number]
('''''lmdz-cq:/tmp/lmdz/LMDZ20211105.trunk''''' and '''''lmdz-cq:~lmdz/WWW/Distrib/WORK/check.out.20211105.trunk''''' respectively in our example).
One can then go through the check_version.sh script [https://www.lmd.jussieu.fr/~lmdz/Distrib/check_version.sh] comparing with the different output to find out what went wrong. Tests of correction can actually be done in the
lmdz-cq:/tmp/lmdz/LMDZ[version_number]
directory.
8fdb48c540e9e2eb94244b27bff8f9e366c89d39
144
143
2021-11-16T14:36:07Z
Lfairhead
1
wikitext
text/x-wiki
As explained on https://lmdz.lmd.jussieu.fr/le-coin-des-developpeurs/controle-qualite, a number of quality control checks of the code are run every night to ensure that nothing was broken by the most recent commits to the svn depository (note that only the trunk version of the code is tested by this procedure).
This note explains what to do if those regular tests reveal that the code is broken.
The checks are launched by the [https://www.lmd.jussieu.fr/~lmdz/Distrib/creation_modipsl.sh following script] which prepares the distribution version of the code and then lauches the [https://www.lmd.jussieu.fr/~lmdz/Distrib/check_version.sh script] that actually launches the quality checks. The results of the tests are synthesized in one line and recorded in the following file https://www.lmd.jussieu.fr/~lmdz/pub/LISMOI.trunk. Each line of this file (besides the comments) gives the version of the code being tested, its corresponding svn revision number and the results of the different checks (as explained in the file and the webpage given above [https://lmdz.lmd.jussieu.fr/le-coin-des-developpeurs/controle-qualite]
=== How to debug a failed quality check ===
Once a failed quality check is established, one should look in the LISMOI.trunk file [https://www.lmd.jussieu.fr/~lmdz/pub/LISMOI.trunk] to find out which version of the code caused a problem (for example 20211105.trunk). One can then find the output of the quality control check in the
lmdz-cq:/tmp/lmdz/LMDZ[version_number]
directory with the actual output file of the check_version.sh script in
lmdz-cq:~lmdz/WWW/Distrib/WORK/check.out.[version_number]
('''''lmdz-cq:/tmp/lmdz/LMDZ20211105.trunk''''' and '''''lmdz-cq:~lmdz/WWW/Distrib/WORK/check.out.20211105.trunk''''' respectively in our example).
One can then go through the check_version.sh script [https://www.lmd.jussieu.fr/~lmdz/Distrib/check_version.sh] comparing with the different output to find out what went wrong. Tests of correction can actually be done in the
lmdz-cq:/tmp/lmdz/LMDZ[version_number]
directory.
[[Category:HowTo]]
[[Category:ExpertDev]]
02f2e254367c9fbe818cb45b94c535ec46bf407b
Catégorie:ExpertDev
14
74
145
2021-11-16T14:36:50Z
Lfairhead
1
Page créée avec « Useful information for experts and developpers »
wikitext
text/x-wiki
Useful information for experts and developpers
a6adf33fb6fab06f00a24233155fddcfb017cec1
WhatIs : The use filtre fft parameter
0
75
147
2021-11-22T16:45:41Z
Emillour
3
Page créée avec « == The longitudinal filter == To minimize stability issues due to grid size diminishing as the pole is approached, some filtering is applied to remove short wavelength (hi... »
wikitext
text/x-wiki
== The longitudinal filter ==
To minimize stability issues due to grid size diminishing as the pole is approached, some filtering is applied to remove short wavelength (high frequency) structures along longitudes. This operation can be summarized as maintaining an effective grid resolution (along a longitude circle) to that existing at latitudes +/-60°.
== the use_filtre_fft parameter ==
In practice the filtering along a longitude circle of N points requires computations with a cost of the order of N*N. And this is the default behavior in the code. It is however possible to do the same work using efficient FFT (Fast Fourire Transform) operations, which cost less (somethings of the order of N*log(N) operations). In fact the larger N is, the more advantageous it is to use the FFT for filtering.
To activate the FFT filtering, just set
use_filtre_fft=y
in your run.def file. Note that the FFT filtering is only implemented in the parallel dynamical core and not the serial one.
22/11/2021
[[Category:WhatIs]]
[[Category:inputs]]
9c3693106187a5297efb75fc47c5845e6b2db1c2
WhatIs: The XIOS library
0
76
148
2021-11-23T12:19:46Z
Emillour
3
Page créée avec « The [https://forge.ipsl.jussieu.fr/ioserver/wiki XIOS] (Xml I/O Server) library is based on client-server principles where the server manages the outputs asynchronously fr... »
wikitext
text/x-wiki
The [https://forge.ipsl.jussieu.fr/ioserver/wiki XIOS] (Xml I/O Server) library is based on client-server principles where the server manages the outputs asynchronously from the client (the climate model) so that the bottleneck of writing data is alleviated.
All aspects of the outputs (name, units, file, post-processing operations, etc.) are controlled by dedicated XML files which are read at run-time. Samples of xml files are provided in the "DefLists" directory.
To compile with XIOS enabled, one must specify the option
-io xios
to the makelmdz_fcm script.
In addition the flag
ok_all_xml=y
should be set (in the config.def file) or else the default behavior, i.e. outputs controlled and generated by the IOIPSL library, will occur.
20/11/2021
[[Category:WhatIs]]
f29f329a02eb7912306c9b328a8978df73ac89cf
LMDZ zoom collection
0
14
149
28
2021-11-24T08:31:51Z
Emillour
3
wikitext
text/x-wiki
== Livre de recettes pour utiliser le zoom à co-écrire par les utilisateurs ==
The collaborative Google spreadsheet summarizing some zoomed simulation setups: [https://docs.google.com/spreadsheets/d/1bjRQps-2b06oQIO6H73m9-6VE7rXrH6OYAXPzQ4JCvo/edit#gid=0 "LMDZ_Zoom_collection"]
[[Catégorie:Zoom]]
be30a864bfbd4d226d40a15dfdbb2fc2703d9aff
LMDZ zoom parameters
0
77
150
2021-11-24T09:08:42Z
Emillour
3
Page créée avec « The "Z" in LMDZ stands for "Zoom". This is because it is possible to define, instead of a regular longitude-latitude grid, a grid with varying mesh sizes along longitudes... »
wikitext
text/x-wiki
The "Z" in LMDZ stands for "Zoom".
This is because it is possible to define, instead of a regular longitude-latitude grid, a grid with varying mesh sizes along longitudes and latitudes.
== Zoom parameters ==
In practice one defines a "zoomed region" of interest where the resolution will be highest (and homogeneous), whereas outside this region the resolution will be low (and also homogeneous, apart from a transition region between the two). This is achieved by specifying the following parameters (usually in gcm.def):
* The zoom center coordinates (in degrees), ''clon'' and ''clat''
* The zoom factor along longitude(x)/latitude(y) directions, ''grossismx'' and ''grossismy''. These ratio represent the ratio between meshes in the zoomed region versus meshes far outside of it.
* The fraction of the zoomed region (i.e. relative to the whole planet which is 360° in longitude and 180° in latitude) along longitude (x) and latitude (y), ''dzoomx'' and ''dzoomy''. In practice the extension in longitude and latitude of the zoomed region will thus be of dzoomx*360° in longitude and dzoomy*180° in latitude
* The steepness of the mesh transition between the inner zoom and outer meshes, ''taux'' and ''tauy''. Typically one should avoid a too sharp transition; tau ~3 is a typically reasonable value; with strong nudging harsher transitions , e.g. tau~8 can also work).
== Choosing an adequate time step for a zoomed simulation ==
The rule of thumb, starting from a "day_step" value that works for a give regular (non-zoomed grid):
day_step(zoom) ~ day_step(regular)*max(grossismx,grossismy)
It is also advised to check what others users have successfully used, see e.g. [[LMDZ_zoom_collection]]
24/11/2021
[[Catégorie:Zoom]]
addadf540594deb2e01fe40d808502e26e90e919
152
150
2021-11-25T09:17:03Z
Emillour
3
wikitext
text/x-wiki
The "Z" in LMDZ stands for "Zoom".
This is because it is possible to define, instead of a regular longitude-latitude grid, a grid with varying mesh sizes along longitudes and latitudes.
== Zoom parameters ==
In practice one defines a "zoomed region" of interest where the resolution will be highest (and homogeneous), whereas outside this region the resolution will be low (and also homogeneous, apart from a transition region between the two). This is achieved by specifying the following parameters (usually in gcm.def):
* The zoom center coordinates (in degrees), ''clon'' and ''clat''
* The zoom factor along longitude(x)/latitude(y) directions, ''grossismx'' and ''grossismy''. These ratio represent the ratio between meshes in the zoomed region versus meshes far outside of it.
* The fraction of the zoomed region (i.e. relative to the whole planet which is 360° in longitude and 180° in latitude) along longitude (x) and latitude (y), ''dzoomx'' and ''dzoomy''. In practice the extension in longitude and latitude of the zoomed region will thus be of dzoomx*360° in longitude and dzoomy*180° in latitude
* The steepness of the mesh transition between the inner zoom and outer meshes, ''taux'' and ''tauy''. Typically one should avoid a too sharp transition; tau ~3 is a typically maximum value if running without nudging; with strong nudging harsher transitions, e.g. tau~8 can also work).
== Choosing an adequate time step for a zoomed simulation ==
The rule of thumb, starting from a "day_step" value that works for a give regular (non-zoomed grid):
day_step(zoom) ~ day_step(regular)*max(grossismx,grossismy)
It is also advised to check what others users have successfully used, see e.g. [[LMDZ_zoom_collection]]
24/11/2021
[[Catégorie:Zoom]]
942ea6f0253eac88288e8781b5c49c5a6e564668
153
152
2021-11-25T09:20:25Z
Emillour
3
wikitext
text/x-wiki
The "Z" in LMDZ stands for "Zoom".
This is because it is possible to define, instead of a regular longitude-latitude grid, a grid with varying mesh sizes along longitudes and latitudes.
== Zoom parameters ==
In practice one defines a "zoomed region" of interest where the resolution will be highest (and homogeneous), whereas outside this region the resolution will be low (and also homogeneous, apart from a transition region between the two). This is achieved by specifying the following parameters (usually in gcm.def):
* The zoom center coordinates (in degrees), ''clon'' and ''clat''
* The zoom factor along longitude(x)/latitude(y) directions, ''grossismx'' and ''grossismy''. These ratio represent the ratio between meshes in the zoomed region versus meshes far outside of it.
* The fraction of the zoomed region (i.e. relative to the whole planet which is 360° in longitude and 180° in latitude) along longitude (x) and latitude (y), ''dzoomx'' and ''dzoomy''. In practice the extension in longitude and latitude of the zoomed region will thus be of dzoomx*360° in longitude and dzoomy*180° in latitude
* The steepness of the mesh transition between the inner zoom and outer meshes, ''taux'' and ''tauy''. Typically one should avoid a too sharp transition; tau ~3 is a typically maximum value if running without nudging; with strong nudging harsher transitions, e.g. tau~8 or even 10 can also work).
* It is advised to target, by adjusting number of points along longitude and latitude, to have something close to a "square" mesh (i.e. same extension, in degrees, along longitudes and latitudes)in the inner zoomed area.
== Choosing an adequate time step for a zoomed simulation ==
The rule of thumb, starting from a "day_step" value that works for a give regular (non-zoomed grid):
day_step(zoom) ~ day_step(regular)*max(grossismx,grossismy)
It is also advised to check what others users have successfully used, see e.g. [[LMDZ_zoom_collection]]
24/11/2021
[[Catégorie:Zoom]]
be5d67e9596314c2947523a5b0b7e456540c9817
WhatIs: The makelmdz fcm script
0
29
151
56
2021-11-25T09:13:06Z
Emillour
3
wikitext
text/x-wiki
== The makelmdz_fcm script to compile LMDZ ==
The makelmdz_fcm script is the bash script that you use to compile LMDZ. This is where one sets various options (e.g which physics package to compile the model with, what grid resolution to use, etc.).
To list available options, run "makelmdz_fcm -h", which should return something like:
<pre>
makelmdz_fcm [options] -arch nom_arch exec
[-h] : brief help
[-d [[IMx]JMx]LM] : IM, JM, LM are the dimensions in x, y, z (default: 96x72x19)
[-p PHYS] : set of physical parametrizations (in libf/phyPHYS), (default: lmd)
[-prod / -dev / -debug] : compilation mode production (default) / developement / debug
[-c false/MPI1/OMCT] : coupling with ocean model : MPI1/OMCT/false (default: false)
[-v false/orchidee2.0/orchidee1.9/true] : version of the vegetation model to include (default: false)
false : no vegetation model
orchidee2.1 : compile using ORCHIDEE 2.1 (or more recent version)
orchidee2.0 : compile using ORCHIDEE 2.0
orchidee1.9 : compile using ORCHIDEE up to the version including OpenMP in ORCHIDEE : tag 1.9-1.9.5(version AR5)-1.9.6
true : (obsolete; for backward compatibility) use ORCHIDEE tag 1.9-1.9.6
[-chimie INCA/false] : with INCA chemistry model or without (default: false)
[-cosp true/false] : compile with/without cosp package (default: false)
[-cosp2 true/false] : compile with/without cosp2 package (default: false)
[-cospv2 true/false] : compile with/without cospv2 package (default: false)
[-inlandsis true/false] : compile with/without inlandsis package (default: false)
[-rrtm true/false] : compile with/without rrtm package (default: false)
[-rad old/rrtm/ecrad] : compile with old/rrtm/ecrad radiatif code (default: old)
[-dust true/false] : compile with/without the dust package by Boucher and co (default: false)
[-strataer true/false] : compile with/without the strat aer package by Boucher and co (default: false)
[-isotopes true/false] : compile with/without water isotopes in the physics
[-isoverif true/false] : compile with/without verifications for water isotopes in the physics
[-diagiso true/false] : compile with/without special diagnostics for water isotopes in the physics
[-isotrac true/false] : compile with/without tracers of water isotopes in the physics
[-parallel none/mpi/omp/mpi_omp] : parallelism (default: none) : mpi, openmp or mixted mpi_openmp
[-g GRI] : grid configuration in dyn3d/GRI_xy.h (default: reg, inclues a zoom)
[-io ioipsl/mix/xios] : Input/Output library (default: ioipsl)
[-include INCLUDES] : extra include path to add
[-cpp CPP_KEY] : additional preprocessing definitions
[-adjnt] : adjoint model, not operational ...
[-mem] : reduced memory dynamics (obsolete flag; always on in parallel mode)
[-filtre NOMFILTRE] : use filtre from libf/NOMFILTRE (default: filtrez)
[-link LINKS] : additional links with other libraries
[-j n] : active parallel compiling on ntask
[-full] : full recompiling
[-libphy] : only compile physics package (no dynamics or main program)
[-fcm_path path] : path to the fcm tool (default: tools/fcm/bin)
[-ext_src path] : path to an additional set of routines to compile with the model
[-arch_path path] : path to architecture files (default: arch)
-arch nom_arch : target architecture
exec : executable to build
</pre>
The user must at the very least provide the name of the executable (typically "gcm") and the mandatory option "-arch" with the target architecture name (e.g. "local" or "gfortran_CICLAD").
As LMDZ works on a fixed grid (set when compiling), option "-d" is also almost always used to specify the number of grid points iimxjjmxlllm (where iim is the number of points along longitude, jjm is the number of points along latitude and llm the number of atmospheric layers).
25/11/2021
[[Category:WhatIs]]
6355590d18d337b9dfdde74fb308bfde535af51b
WhatIs: The gcm.def file
0
78
155
2021-11-26T07:51:57Z
Emillour
3
Page créée avec « The gcm.def file ("included" in the run.def file that is read by the GCM at runtime) contains parameters related to the global (horizontal) grid and time-marching setup :... »
wikitext
text/x-wiki
The gcm.def file ("included" in the run.def file that is read by the GCM at runtime) contains parameters related to the global (horizontal) grid and time-marching setup : physics/dynamics time steps, dissipation factors, sponge layer, zoom properties...
Many of these parameters are strongly linked to the horizontal resolution of the model.
Some examples of typical parameter values for given resolutions can be found in the "DefLists" subdirectory of LMDZ.
26/11/2021
[[Category:WhatIs]]
[[Category:Inputs]]
f5c06715bb0d3165044e40ff2daa674cd786d766
Lateral dissipation in LMDZ
0
79
156
2021-11-29T09:08:55Z
Emillour
3
Page créée avec « == Some information about lateral dissipation in LMDZ (and related input parameters) == === Overview === In a nutshell: It is necessary to add some lateral dissipation in... »
wikitext
text/x-wiki
== Some information about lateral dissipation in LMDZ (and related input parameters) ==
=== Overview ===
In a nutshell: It is necessary to add some lateral dissipation in order to fulfill the observed energy cascade from resolved scales (by the GCM) to unresolved scales (sub-grid scales, from the point of view of the GCM). In practice this is done by adding a dissipation term in the form of an iterated laplacian acting on winds and temperature.
=== Dissipation parameters ===
These are set in gcm.def. The main ones are:
* dissip_period : Apply dissipation every dissip_period dynamical steps (default is 0, which implies let the model pick an appropriate value)
* nitergdiv : number of iterations on velocity dissipation operator grad.div (typically 1)
* nitergrot: number of iterations on velocity dissipation operator grad.rot (typically 2)
* niterh: number of iterations on temperature dissipation operator div.grad (typically 2)
* tetagdiv: dissipation time scale (s) for smallest wavelength for u,v (grad.div component)
* tetagrot: dissipation time scale (s) for smallest wavelength for u,v (grad.rot component)
* tetatemp: dissipation time scale (s) for smallest wavelength for potential temperature (div.grad)
In addition there is a multiplicative factor for the dissipation coefficient, which increases with model levels (see dyn3d_common/inidissip.F90), which can be controlled by flag “vert_prof_dissip” (tampering with this flag is for experts only)
=== Good to know and rules of thumb ===
* Dissipation parameters should preferably be those stated in the example gcm.def files provided in the DefLists subdirectory.
* If there are some numerical instabilities then one should try to increase dissipation (i.e. reduce teta* time scales) as this tends to stabilize the model.
* Optimal values for tetadiv/tetarot/tetatemp depend on the horizontal resolution of the GCM. In practice, the higher the horizontal resolution, the more dissipation is needed.
29/11/2021
[[Category:inputs]]
71fbfc1a7b6bc0034d56e57c18d22afca51dd7e0
Ajout d'une variable d'état
0
80
157
2021-11-30T18:02:14Z
Lguez
4
Page créée avec « Pour ajouter une variable d'état de la physique dans LMDZ : * déclarez-la dans le module <code>phys_state_var_mod</code> * allouez-la et désallouez-la dans les subrouti... »
wikitext
text/x-wiki
Pour ajouter une variable d'état de la physique dans LMDZ :
* déclarez-la dans le module <code>phys_state_var_mod</code>
* allouez-la et désallouez-la dans les subroutines <code>phys_state_var_init</code> et <code>phys_state_var_end</code>
* donnez-lui une valeur initiale dans la subroutine <code>etat0phys_netcdf</code>
* lisez-la à partir du fichier <code>startphy.nc</code> dans la subroutine <code>phyetat0</code>
* écrivez-la dans le fichier <code>restartphy.nc</code> dans la subroutine <code>phyredem</code>
* si c'est une variable qui dépend de la sous-surface considérée, donnez-lui une valeur lorsqu'une sous-surface apparaît, dans la subroutine <code>pbl_surface_newfrac</code>
3d4b88d88d549443a10c15c5ac4c92e8f81b3c6d
The sponge layer
0
81
158
2021-12-01T08:29:23Z
Emillour
3
Page créée avec « == in a nutshell == The sponge layer is necessary to damp vertically propagating waves, which would otherwise non-physically be reflected downward from the model top. In p... »
wikitext
text/x-wiki
== in a nutshell ==
The sponge layer is necessary to damp vertically propagating waves, which would otherwise non-physically be reflected downward from the model top.
In practice its application is thus limited to a few of the topmost layers (usually 4), with decreasing impact with decreasing altitudes.
The sponge layer is a relaxation of main variables (winds and/or potential temperature) towards a given value or their zonal mean along a given time scale.
== Sponge layer parameters ==
The parameters controlling the sponge layer are in input file gcm.def
* iflag_top_bound (integer): 0 for no sponge, 1 for a sponge over the last 4 topmost layers, 2 to have a sponge layer extending over topmost layers down to a pressure which is 100 times that of the topmost layer's.
* mode_top_bound (integer): 0 for no relaxation, 1 to relax winds (u,v) to zero, 2 to relax winds (u,v) towards their zonal mean, 3 to relax winds (u,v) and potential temperature towards their zonal mean.
* tau_top_bound (real, Hz): inverse of the relaxation characteristic time scale at the topmost layer; halved at each successive descending layer.
== Application of the sponge ==
The sponge is applied right after dissipation at each dissipation step.
01/12/2021
[[Category:inputs]]
ee5b652dadda64018055d0c8b93ca958b065b434
159
158
2021-12-02T07:53:17Z
Emillour
3
wikitext
text/x-wiki
== in a nutshell ==
The sponge layer is necessary to damp vertically propagating waves, which would otherwise non-physically be reflected downward from the model top.
In practice its application is thus limited to a few of the topmost layers (usually 4), with decreasing impact with decreasing altitudes.
The sponge layer is a relaxation of main variables (winds and/or potential temperature) towards a given value or their zonal mean along a given time scale.
== Sponge layer parameters ==
The parameters controlling the sponge layer are in input file gcm.def (or sometimes in vert_L**.def as they are strongly linked to the vertical grid)
* iflag_top_bound (integer): 0 for no sponge, 1 for a sponge over the last 4 topmost layers, 2 to have a sponge layer extending over topmost layers down to a pressure which is 100 times that of the topmost layer's.
* mode_top_bound (integer): 0 for no relaxation, 1 to relax winds (u,v) to zero, 2 to relax winds (u,v) towards their zonal mean, 3 to relax winds (u,v) and potential temperature towards their zonal mean.
* tau_top_bound (real, Hz): inverse of the relaxation characteristic time scale at the topmost layer; which is then halved at each successive descending layer.
== Application of the sponge ==
The sponge is applied right after dissipation at each dissipation step.
01/12/2021
[[Category:inputs]]
db30672f75efd7779b7897ebd38e9c4c41bc1b64
WhatIs: the ok hines parameter
0
82
160
2021-12-03T08:13:32Z
Emillour
3
Page créée avec « The "ok_hines" parameter is a logical flag, i.e. to be set to "y" (or equivalently ".true.") or "n" (or equivalently ".false.") in the run.def file. If on, this parametri... »
wikitext
text/x-wiki
The "ok_hines" parameter is a logical flag, i.e. to be set to "y" (or equivalently ".true.") or "n" (or equivalently ".false.") in the run.def file.
If on, this parametrization accounts for the effect of gravity waves in the stratosphere when the later is not represented in the GCM. This is essentially a depreciated scheme, superseded by the more recent non-orographic gravity wave parametrization (flag "ok_gwd_rando").
In practice, when running in configurations without an explicit representation of the stratosphere (i.e. with 39 model levels or less) then one should have '''ok_hines=y''' and '''ok_gwd_rando=n''', whereas when running with the stratosphere (e.g. 79 model levels or more) then one should use '''ok_hines=n''' and '''ok_gwd_rando=y'''
03/12/2021
[[Category:WhatIs]]
[[Category:Inputs]]
7efe1d90fa84028cb0a3322e67e406e65b92a8e2
WhatIs: The ok strato parameter
0
83
161
2021-12-03T08:26:33Z
Emillour
3
Page créée avec « The '''ok_strato''' parameter is a logical flag, i.e. to be set to "y" (or equivalently ".true.") or "n" (or equivalently ".false.") in the run.def file, in practice most... »
wikitext
text/x-wiki
The '''ok_strato''' parameter is a logical flag, i.e. to be set to "y" (or equivalently ".true.") or "n" (or equivalently ".false.") in the run.def file, in practice most often in the "vert.def" (or sometimes "gcm.def") file, as it is strongly linked to the model vertical resolution
Setting '''ok_strato=y''' is recommended in most cases as it implies:
* Some impact on the vertical discretization (i.e. where the model levels are placed)
* Some switches on physical parametrizations related to the impact of gravity waves (orographic and non-orographic)
03/12/2021
[[Category:WhatIs]]
[[Category:Inputs]]
c6b5333d26405ea3667abe2a0fd7c9c2a6441779
162
161
2021-12-03T08:34:31Z
Emillour
3
wikitext
text/x-wiki
The '''ok_strato''' parameter is a logical flag, i.e. to be set to "y" (or equivalently ".true.") or "n" (or equivalently ".false.") in the run.def file, in practice most often in the "vert.def" (or sometimes "gcm.def") file, as it is strongly linked to the model vertical resolution
Setting '''ok_strato=y''' is recommended in most cases as it implies:
* Some impact on the vertical discretization (i.e. where the model levels are placed)
* Some switches on physical parametrizations related to the impact of gravity waves (orographic and non-orographic)
Running with '''ok_strato=n''' would only be useful and advised if running with simple setups such as with 19 vertical layers (with old ~CMIP3-like physics packages) or for aquaplanets or without physics (in Held&Suarez configuration)
03/12/2021
[[Category:WhatIs]]
[[Category:Inputs]]
d9c1184eba0a20d5281404d1f4f80ee5b17fc96b
WhatIs: The run.def input file
0
26
163
52
2021-12-03T13:10:32Z
Emillour
3
wikitext
text/x-wiki
== The run.def input file and its format ==
The run.def file is a text file that is read at run time by LMDZ (and must thus be present in the same directory as the executable).
It contains the values of various parameters that the user can specify (as "key = value", where "key" is a predefined keyword and "value" may be a real, an integer, a string or a logical) and modify depending on the specific simulation that is intended, e.g. the line:
<pre>
nday = 30
</pre>
means that when the GCM will run, it will set parameter nday (the number of days to run) to 30.
Any line starting with # is a comment, e.g.
<pre>
# nday : length of the simulation (in days)
</pre>
The order in which parameters are given in the run.def file is not important, except if a parameter value is given more than once (not recommended!), then it is the last occurrence that prevails.
== *.def files included in run.def ==
The run.def file can include other files (based on the same format, lines containing "key = value" or comments) using the INCLUDEDEF keyword, e.g.:
<pre>
INCLUDEDEF=gcm.def
</pre>
In practice, because there are many parameters that one can set/change, it is good practice to separate related sets of parameters in separate files, e.g.:
<pre>
INCLUDEDEF=physiq.def
INCLUDEDEF=gcm.def
INCLUDEDEF=vert.def
INCLUDEDEF=orchidee.def
INCLUDEDEF=config.def
INCLUDEDEF=reprobus.def
INCLUDEDEF=guide.def
INCLUDEDEF=inca.def
</pre>
Where
* parameters put in run.def are related to the simulations setup (number of days to run, if coupled to an ocean -NEMO- or surface model -ORCHIDEE-, etc.)
* physiq.def contains flags related to the physical package parametrizations
* gcm.def contains parameters related to the dynamics, horizontal grid and time stepping schemes
* vert.def contains parameters related to the vertical grid
* config.def contains parameters related to the physical package configuration (outputs specifications, orbital /ozone/ aerosol setup, etc.)
* guide.def contains parameters related to nudging
* orchidee.def/inca.def/reprobus.def contain parameters related to these models (if they are used)
== Reference def files ==
Reference *.def files are provided in the LMDZ/DefLists directory
02/12/2021
[[Category:WhatIs]]
[[Category:inputs]]
f6abea952fca822900a8198203d50b503cc1731c
HowTo: Run an aquaplanet simulation
0
84
164
2021-12-03T13:55:12Z
Emillour
3
Page créée avec « == The aquaplanet configuration == The ''aquaplanet'' configuration is a simpler setup than a usual simulation of the Earth's atmosphere in that idealized initial and boun... »
wikitext
text/x-wiki
== The aquaplanet configuration ==
The ''aquaplanet'' configuration is a simpler setup than a usual simulation of the Earth's atmosphere in that idealized initial and boundary conditions are used: no topography and imposed surface temperatures over the whole globe (hence the "aqua"). Apart from this, the full physics package is used, just like in a "regular" LMDZ simulation.
== aquaplanet parameters ==
In practice setting up an aquaplanet simulation is simpler as one may start without initial condition files (start.nc and startfi.nc). This requires setting
<pre>
read_start=n
</pre>
in run.def
In addition one must specify a value of '''iflag_phys''' between 101 and 114 to trigger the aquaplanet mode, e.g.
<pre>
iflag_phys=101
</pre>
This will automatically generate initial conditions and trigger the generation of a '''limit.nc''' file adapted to the aquaplanet setup. The values of surface temperature that will be put in the limit.nc file depend on '''iflag_phys''' (see routines ''iniaqua'' and ''profil_sst'' in libf/phylmd/phyaqua_mod.F90).
== Good to know ==
Note that to continue an aquaplanet simulation (i.e. using restart.nc and restartphy.nc files from a previous aquaplanet simulation) one should revert iflag_phys to 1.
03/12/2021
[[Category:HowTo]]
d0b695495571b271422766b600fa720f823e5807
WhatIs: The XIOS library
0
76
165
148
2021-12-03T14:35:22Z
Emillour
3
wikitext
text/x-wiki
The [https://forge.ipsl.jussieu.fr/ioserver/wiki XIOS] (Xml I/O Server) library is based on client-server principles where the server manages the outputs asynchronously from the client (the climate model) so that the bottleneck of writing data is alleviated.
To compile with XIOS enabled, one must specify the option
-io xios
to the makelmdz_fcm script.
In addition the flag
ok_all_xml=y
should be set (in the config.def file) or else the default behavior, i.e. outputs controlled and generated by the IOIPSL library, will occur.
== XIOS output controls ==
All aspects of the outputs (name, units, file, post-processing operations, etc.) are controlled by dedicated XML files which are read at run-time. Samples of xml files are provided in the "DefLists" directory.
In a nutshell:
* the master file read by XIOS is ''iodef.xml''; and contains specific XIOS parameters such as ''using_server'' to dictate whether XIOS is run in client-server mode (true) or attached (false) mode, ''info_level'' to set the verbosity of XIOS messages (0: none, 100: very verbose), ''print_file'' to set whether XIOS messages will be sent to standard output (false) or dedicated xios_*.out and xios_*.err files.
<pre>
<variable id="using_server" type="bool">false</variable>
<variable id="info_level" type="int">0</variable>
<variable id="print_file" type="bool"> false </variable>
</pre>
* It is common practice to have LMDZ-related definitions and outputs in separate XML files, e.g. ''context_lmdz.xml'' which are included in ''iodef.xml'' via the ''src'' attribute, e.g.
<pre>
<context id="LMDZ" src="./context_lmdz.xml"/>
</pre>
The ''context_lmdz.xml'' file must then contain all fields/grid/file output definitions (which may be split into multiple XML files).
20/11/2021
[[Category:WhatIs]]
[[Category:Xios]]
5de258ea990d8b964eb5bf0af295679d9145ef7f
166
165
2021-12-03T14:36:18Z
Emillour
3
wikitext
text/x-wiki
The [https://forge.ipsl.jussieu.fr/ioserver/wiki XIOS] (Xml I/O Server) library is based on client-server principles where the server manages the outputs asynchronously from the client (the climate model) so that the bottleneck of writing data is alleviated.
To compile with XIOS enabled, one must specify the option
-io xios
to the makelmdz_fcm script.
In addition the flag
ok_all_xml=y
should be set (in the config.def file) or else the default behavior, i.e. outputs controlled and generated by the IOIPSL library, will occur.
== XIOS output controls ==
All aspects of the outputs (name, units, file, post-processing operations, etc.) are controlled by dedicated XML files which are read at run-time. Samples of xml files are provided in the "DefLists" directory.
In a nutshell:
* the master file read by XIOS is ''iodef.xml''; and contains specific XIOS parameters such as ''using_server'' to dictate whether XIOS is run in client-server mode (true) or attached (false) mode, ''info_level'' to set the verbosity of XIOS messages (0: none, 100: very verbose), ''print_file'' to set whether XIOS messages will be sent to standard output (false) or dedicated xios_*.out and xios_*.err files (true).
<pre>
<variable id="using_server" type="bool">false</variable>
<variable id="info_level" type="int">0</variable>
<variable id="print_file" type="bool"> false </variable>
</pre>
* It is common practice to have LMDZ-related definitions and outputs in separate XML files, e.g. ''context_lmdz.xml'' which are included in ''iodef.xml'' via the ''src'' attribute, e.g.
<pre>
<context id="LMDZ" src="./context_lmdz.xml"/>
</pre>
The ''context_lmdz.xml'' file must then contain all fields/grid/file output definitions (which may be split into multiple XML files).
20/11/2021
[[Category:WhatIs]]
[[Category:Xios]]
2c98fbb8084c2c475fa59401e600d37df642e115
WhatIs: The install lmdz.sh script
0
85
167
2021-12-03T14:59:41Z
Emillour
3
Page créée avec « The ''install_lmdz.sh'' script is a Bash script that aims at being an "installer" for LMDZ of Linux machines. In practice it runs a succession of mandatory steps to insta... »
wikitext
text/x-wiki
The ''install_lmdz.sh'' script is a Bash script that aims at being an "installer" for LMDZ of Linux machines.
In practice it runs a succession of mandatory steps to install and run the model from scratch, namely:
* Download and install required libraries (NetCDF, IOIPSL and possibly XIOS)
* Download the source code (LMDZ and ORCHIDEE), compile it and run a test (bench) simulation
It has many options and features; a good starting point (short of reading and digesting the Bash script itself) is to run '''install_lmdz.sh -h''' to learn about these, which should yield something like:
<pre>
install_lmdz.sh
./install_lmdz.sh [ -v version ] [ -r svn_release ]
[ -parallel PARA ] [ -d GRID_RESOLUTION ] [ -bench 0/1 ]
[-name LOCAL_MODEL_NAME] [-gprof] [-opt_makelmdz] [-rad RADIATIF]
-v "version" like 20150828.trunk
see http://www.lmd.jussieu.fr/~lmdz/Distrib/LISMOI.trunk
-r "svn_release" : either the svn release number or "last"
-compiler gfortran|ifort|pgf90 (default: gfortran)
-parallel PARA : can be mpi_omp (mpi with openMP) or none (for sequential)
-d GRID_RESOLUTION should be among the available benchs if -bench 1
among which : 48x36x19, 48x36x39
if wanting to run a bench simulation in addition to compilation
default : 48x36x19
-bench activating the bench or not (0/1). Default 1
-name LOCAL_MODEL_NAME : default = LMDZversion.release
-netcdf PATH : full path to an existing installed NetCDF library
(without -netcdf: also download and install the NetCDF library)
-xios also download and compile the XIOS library
(requires the NetCDF4-HDF5 library, also installed by default)
(requires to also have -parallel mpi_omp)
-gprof to compile with -pg to enable profiling with gprof
-cosp to run without our with cospv1 or cospv2 [none/v1/v2]
-rad RADIATIF can be old, rrtm or ecrad radiatif code
-nofcm to compile without fcm
-SCM install 1D version automatically
-debug compile everything in debug mode
-opt_makelmdz to call makelmdz or makelmdz_fcm with additional options
-physiq to choose which physics package to use
-env_file specify an arch.env file to overwrite the existing one
-veget surface model to run [NONE/CMIP6/xxxx]
</pre>
Note that the ''install_lmdz.sh'' script is not the only way to install LMDZ; one can manually do the various key steps (quite possibly adapted to the specificities of the machine that is used).
02/12/2021
[[Category:WhatIs]]
5973e818c9eb0835c79222e946e59c17bfb83345
The vertical discretization in LMDZ
0
86
168
2021-12-03T15:27:39Z
Emillour
3
Page créée avec « LMDZ model levels are hybrid sigma-pressure coordinates. There are many ways to define the vertical distribution of model layers via the def files. In practice the relate... »
wikitext
text/x-wiki
LMDZ model levels are hybrid sigma-pressure coordinates.
There are many ways to define the vertical distribution of model layers via the def files. In practice the related parameters are set in the ''vert.def'' (which is included in the ''run.def'' file). The master parameter being ''vert_sampling'' (string) which can be set to:
* vert_sampling=strato_custom : a highly customizable setup for stratospheric extensions
* vert_sampling=strato : a default for stratospheric extensions
* vert_sampling=sigma : make model levels (automatically generated) purely sigma levels
* vert_sampling=tropo : a default for tropospheric simulations
* vert_sampling = read : read ap() and bp(), the auxiliary hybrid coordinate coefficients, from file “hybrid.txt”
== Friendly advice ==
Typically you don't need to mess with the vertical discretization, the provided defaults (see files in DefLists) should match your need.
If you really want to dive into this, then you should check out routine libf/dyn3d_common/disvert.F90
03/12/2021
[[Category:Inputs]]
e4176716a0f47d4b01b68ab1474997f0bb7402ae
169
168
2021-12-03T15:38:13Z
Emillour
3
wikitext
text/x-wiki
LMDZ model levels are hybrid sigma-pressure coordinates.
This means that the pressure P of a model level is a function of surface pressure PS (which varies with time) and fixed predefined time-independent hybrid coordinates ap() and bp():
<pre>
P(level,time) = ap(level) + bp(level) . Ps (time)
</pre>
Near the surface ap() is negligible and
<pre>
P(level,time) ~ bp(level) . Ps (time)
</pre>
and thus model levels are essentially sigma levels there.
Going to higher altitudes, bp() goes to zero and the bp().Ps term becomes negligible and then
<pre>
P(level,time) ~ ap(level)
</pre>
and thus model levels tend to be purely pressure levels there.
== definition of the vertical distribution ==
There are many ways to define the vertical distribution of model layers via the def files. In practice the related parameters are set in the ''vert.def'' (which is included in the ''run.def'' file). The master parameter being ''vert_sampling'' (string) which can be set to:
* vert_sampling=strato_custom : a highly customizable setup for stratospheric extensions
* vert_sampling=strato : a default for stratospheric extensions
* vert_sampling=sigma : make model levels (automatically generated) purely sigma levels
* vert_sampling=tropo : a default for tropospheric simulations
* vert_sampling = read : read ap() and bp(), the auxiliary hybrid coordinate coefficients, from file “hybrid.txt”
== Friendly advice ==
Typically you don't need to mess with the vertical discretization, the provided defaults (see files in DefLists) should match your need.
If you really want to dive into this, then you should check out routine libf/dyn3d_common/disvert.F90
03/12/2021
[[Category:Inputs]]
bbdf8d8e12dd0cd8a3a761adc3c1b8a24563cbf3
WhatIs: The limit.nc file
0
87
170
2021-12-03T15:49:58Z
Emillour
3
Page créée avec « The ''limit.nc'' file is a NetCDF input file that is read by LMDZ at run-time. It contains the model's boundary conditions such as the fractions of land/ocean/land ice /s... »
wikitext
text/x-wiki
The ''limit.nc'' file is a NetCDF input file that is read by LMDZ at run-time. It contains the model's boundary conditions such as the fractions of land/ocean/land ice /sea ice, albedo of the surface, surface roughness value, sea surface temperature, etc. These fields are on the same physics grid than LMDZ and given for every day of the year.
== Good to know ==
* Since the ''limit.nc'' file is on the same grid as the physics, a given ''limits.nc'' file is only valid for a given model horizontal resolution.
* Typically the ''limit.nc'' file is generated at the sough resolution using the '''ce0l''' main program (compiled at the same resolution as the GCM, obviously).
03/12/2021
[[Category:WhatIs]]
7192e3ea5a03584fea5d4852cb7ef94d08b1e271
Calendars
0
88
171
2021-12-03T16:20:36Z
Emillour
3
Page créée avec « LMDZ can run using various calendars. The choice of calendar is set using the ''calend'' parameter (string) in the ''run.def'' file, which may be set to: * calend=earth_3... »
wikitext
text/x-wiki
LMDZ can run using various calendars.
The choice of calendar is set using the ''calend'' parameter (string) in the ''run.def'' file, which may be set to:
* calend=earth_360d (default value if ''calend'' is not set) : years of 360 days (12 months of 30 days each)
* calend=earth_365d : years of 365 days (12 months of varying length; 28 days in February every year)
* calend=earth_366d : real gregorian year of 365 or 366 days with leap years
* calend=gregorian : same as earth_366d
The default behavior of the model is to use the date read in the start.nc file as an initial date for the run (and thus technically continue time marching where it had left off at the previous simulation). But the user may reset the date via the following flag:
* raz_date=1 (default is 0, i.e. no calendar reset, continue from date read in the start file) : reset the calendar
If resetting the calendar then the user should also provide in ''run.def'' :
* anneeref=... : calendar year (default=1998; why not? have to start somewhere...)
* dayref=... : day of the year at which the simulation starts (default=1; i.e. first day of the year)
* starttime=... : hour at which the simulation begins (default=0 ; i.e. midnight)
03/12/2021
[[Category:Inputs]]
37486801f274169ac261cc31e9f95acc45a43629
Some pointers about running LMDZ in parallel
0
89
172
2021-12-07T15:16:42Z
Emillour
3
Page créée avec « Some pointers and advice for those who want to run LMDZ in parallel on a Linux PC This note is mainly oriented towards using LMDZ on a "personal" computer, i.e. as oppose... »
wikitext
text/x-wiki
Some pointers and advice for those who want to run LMDZ in parallel on a Linux PC
This note is mainly oriented towards using LMDZ on a "personal" computer, i.e. as opposed to on a cluster or national center (surc as IDRIS or CCRT or CINES) where many tools and libraries are available.
The first step is of course to have the model installed on your Linux machine, which should be relatively easy using the ''install_lmdz.sh'' script launched with appropriate option, e.g.
<pre>
./install_lmdz.sh -parallel mpi_omp
</pre>
If unfortunately the script fails, you might need to make some adjustments and generate your own NetCDF or IPSL libraries and/or your own ''arch'' files.
== Compiling and running in MPI only ==
A prerequisite is (obviously) to have an MPI library at hand (e.g. MPICH, OpenMPI, etc.). Also having a BLAS library at hand, although not mandatory, is recommended.
If the ''install_lmdz.sh'' script ran fine (with the ''-parallel mpi_omp'' option, then this is clearly the case.
Assuming that ''mpif90'' points to the MPI wrapper (to gfortran) , that the MPI library is installed in ''/my/mpi/directory/lib'', that related files to include (mpi.h) are in directory ''/my/mpi/directory/include'', that the BLAS library is installed in ''/my/blas/directory/lib'', then an example of an adequate ''arch-local.fcm'' file would be:
<pre>
%COMPILER /my/mpi/directory/bin/mpif90
%LINK /my/mpi/directory/bin/mpif90
%AR ar
%MAKE make
%FPP_FLAGS -P -traditional
%FPP_DEF NC_DOUBLE BLAS SGEMV=DGEMV SGEMM=DGEMM
%BASE_FFLAGS -cpp -ffree-line-length-0 -fdefault-real-8
%PROD_FFLAGS -O3 -funroll-loops
%DEV_FFLAGS -g -O1 -Wall
%DEBUG_FFLAGS -g3 -Wall -fbounds-check -ffpe-trap=invalid,zero,overflow -O0 -fstack-protector-all -fbacktrace -finit-real=snan
%MPI_FFLAGS -fcray-pointer -I/my/mpi/directory/include
%OMP_FFLAGS
%BASE_LD -L/my/blas/directory/lib -lblas
%MPI_LD -L/my/mpi/directory/lib -lmpi
%OMP_LD
</pre>
And compiling the GCM would be done via
<pre>
makelmdz_fcm -arch local -parallel mpi ......
</pre>
To then run LMDZ on N=4 processors would require running the command:
<pre>
/my/mpi/directory/bin/mpirun -np 4 gcm_32x32x39_phylmd_para_mem.e
</pre>
Note that prior to running you might need to update your ''LD_LIBRARY_PATH'' environment variable to include the path to your MPI/NetCDF/BLAS libraries, especially if these are locate in non-standard paths. Note also that if you are using the IOIPSL library, then output files will be split into as many files as processors were used and should be recombined into a single file using the IOIPSL ''rebuild'' utility.
== Compiling and running in OpenMP only ==
Assuming that the BLAS library is installed in ''/my/blas/directory/lib'', then an example of an adequate ''arch-local.fcm'' file would be:
<pre>
%COMPILER gfortran
%LINK gfortran
%AR ar
%MAKE make
%FPP_FLAGS -P -traditional
%FPP_DEF NC_DOUBLE BLAS SGEMV=DGEMV SGEMM=DGEMM
%BASE_FFLAGS -cpp -ffree-line-length-0 -fdefault-real-8
%PROD_FFLAGS -O3 -funroll-loops
%DEV_FFLAGS -g -O1 -Wall
%DEBUG_FFLAGS -g3 -Wall -fbounds-check -ffpe-trap=invalid,zero,overflow -O0 -fstack-protector-all -fbacktrace -finit-real=snan
%MPI_FFLAGS -fcray-pointer -I/my/mpi/directory/include
%OMP_FFLAGS -fopenmp -fcray-pointer
%BASE_LD -L/my/blas/directory/lib -lblas
%MPI_LD
%OMP_LD -fopenmp
</pre>
And compiling the GCM would be done via
<pre>
makelmdz_fcm -arch local -parallel omp ......
</pre>
To then run LMDZ using X=4 tasks would require running the commands:
<pre>
export OMP_NUM_THREADS=4
export OMP_STACKSIZE=200M
./gcm_32x32x39_phylmd_para_mem.e
</pre>
Note that to avoid memory issues (which can easily arrive in OpenMP as separate tasks need some private memory to store their variables, which is defined by the ''OMP_STACKSIZE=...'' environment variable) it is strongly recommended to have as much stack available as possible. Which in practice means setting:
<pre>
ulimit -s unlimited
</pre>
prior to running (and in practice this can be put in your .bashrc or .bash_profile file to be always set this way).
== Compiling and running in mixed MPI/OpenMP ==
All that is mentionned above about MPI and OpenMP applies.
An example of an adequate ''arch-local.fcm'' file would be:
<pre>
%COMPILER /my/mpi/directory/bin/mpif90
%LINK /my/mpi/directory/bin/mpif90
%AR ar
%MAKE make
%FPP_FLAGS -P -traditional
%FPP_DEF NC_DOUBLE BLAS SGEMV=DGEMV SGEMM=DGEMM
%BASE_FFLAGS -cpp -ffree-line-length-0 -fdefault-real-8
%PROD_FFLAGS -O3 -funroll-loops
%DEV_FFLAGS -g -O1 -Wall
%DEBUG_FFLAGS -g3 -Wall -fbounds-check -ffpe-trap=invalid,zero,overflow -O0 -fstack-protector-all -fbacktrace -finit-real=snan
%MPI_FFLAGS -fcray-pointer -I/my/mpi/directory/include
%OMP_FFLAGS -fopenmp -fcray-pointer
%BASE_LD -L/my/blas/directory/lib -lblas
%MPI_LD -L/my/mpi/directory/lib -lmpi
%OMP_LD -fopenmp
</pre>
And compiling the GCM would be done via
<pre>
makelmdz_fcm -arch local -parallel mpi_omp ......
</pre>
To then run LMDZ using N=4 MPI processes with X=2 tasks each (i.e.using N*X=8 cores overall) would require running the commands:
<pre>
export OMP_NUM_THREADS=2
export OMP_STACKSIZE=200M
/my/mpi/directory/bin/mpirun -np 4 gcm_32x32x39_phylmd_para_mem.e
</pre>
06/12/2021
[[Category:Parallel]]
41ba78322376f350fb654816529b55d8934df963
173
172
2021-12-07T15:29:47Z
Emillour
3
wikitext
text/x-wiki
Some pointers and advice for those who want to run LMDZ in parallel on a Linux PC
This note is mainly oriented towards using LMDZ on a "personal" computer, i.e. as opposed to on a cluster or national center (surc as IDRIS or CCRT or CINES) where many tools and libraries are available.
The first step is of course to have the model installed on your Linux machine, which should be relatively easy using the ''install_lmdz.sh'' script launched with appropriate option, e.g.
<pre>
./install_lmdz.sh -parallel mpi_omp
</pre>
If unfortunately the script fails, you might need to make some adjustments and generate your own NetCDF or IOIPSL libraries and/or your own ''arch'' files. What follows assumes that necessary libraries have been correctly built and are available. The focus here is on generating appropriate arch.fcm files and then compiling and running the GCM.
== Compiling and running in MPI only ==
A prerequisite is (obviously) to have an MPI library at hand (e.g. MPICH, OpenMPI, etc.). Also having a BLAS library at hand, although not mandatory, is recommended.
If the ''install_lmdz.sh'' script ran fine (with the ''-parallel mpi_omp'' option, then this is clearly the case.
Assuming that ''mpif90'' points to the MPI wrapper (to gfortran) , that the MPI library is installed in ''/my/mpi/directory/lib'', that related files to include (mpi.h) are in directory ''/my/mpi/directory/include'', that the BLAS library is installed in ''/my/blas/directory/lib'', then an example of an adequate ''arch-local.fcm'' file would be:
<pre>
%COMPILER /my/mpi/directory/bin/mpif90
%LINK /my/mpi/directory/bin/mpif90
%AR ar
%MAKE make
%FPP_FLAGS -P -traditional
%FPP_DEF NC_DOUBLE BLAS SGEMV=DGEMV SGEMM=DGEMM
%BASE_FFLAGS -cpp -ffree-line-length-0 -fdefault-real-8
%PROD_FFLAGS -O3 -funroll-loops
%DEV_FFLAGS -g -O1 -Wall
%DEBUG_FFLAGS -g3 -Wall -fbounds-check -ffpe-trap=invalid,zero,overflow -O0 -fstack-protector-all -fbacktrace -finit-real=snan
%MPI_FFLAGS -fcray-pointer -I/my/mpi/directory/include
%OMP_FFLAGS
%BASE_LD -L/my/blas/directory/lib -lblas
%MPI_LD -L/my/mpi/directory/lib -lmpi
%OMP_LD
</pre>
And compiling the GCM would be done via
<pre>
makelmdz_fcm -arch local -parallel mpi ......
</pre>
To then run LMDZ on N=4 processors would require running the command:
<pre>
/my/mpi/directory/bin/mpirun -np 4 gcm_32x32x39_phylmd_para_mem.e
</pre>
Note that prior to running you might need to update your ''LD_LIBRARY_PATH'' environment variable to include the path to your MPI/NetCDF/BLAS libraries, especially if these are locate in non-standard paths. Note also that if you are using the IOIPSL library, then output files will be split into as many files as processors were used and should be recombined into a single file using the IOIPSL ''rebuild'' utility.
== Compiling and running in OpenMP only ==
Assuming that the BLAS library is installed in ''/my/blas/directory/lib'', then an example of an adequate ''arch-local.fcm'' file would be:
<pre>
%COMPILER gfortran
%LINK gfortran
%AR ar
%MAKE make
%FPP_FLAGS -P -traditional
%FPP_DEF NC_DOUBLE BLAS SGEMV=DGEMV SGEMM=DGEMM
%BASE_FFLAGS -cpp -ffree-line-length-0 -fdefault-real-8
%PROD_FFLAGS -O3 -funroll-loops
%DEV_FFLAGS -g -O1 -Wall
%DEBUG_FFLAGS -g3 -Wall -fbounds-check -ffpe-trap=invalid,zero,overflow -O0 -fstack-protector-all -fbacktrace -finit-real=snan
%MPI_FFLAGS -fcray-pointer -I/my/mpi/directory/include
%OMP_FFLAGS -fopenmp -fcray-pointer
%BASE_LD -L/my/blas/directory/lib -lblas
%MPI_LD
%OMP_LD -fopenmp
</pre>
And compiling the GCM would be done via
<pre>
makelmdz_fcm -arch local -parallel omp ......
</pre>
To then run LMDZ using X=4 tasks would require running the commands:
<pre>
export OMP_NUM_THREADS=4
export OMP_STACKSIZE=200M
./gcm_32x32x39_phylmd_para_mem.e
</pre>
Note that to avoid memory issues (which can easily arrive in OpenMP as separate tasks need some private memory to store their variables, which is defined by the ''OMP_STACKSIZE=...'' environment variable) it is strongly recommended to have as much stack available as possible. Which in practice means setting:
<pre>
ulimit -s unlimited
</pre>
prior to running (and in practice this can be put in your .bashrc or .bash_profile file to be always set this way).
== Compiling and running in mixed MPI/OpenMP ==
All that is mentionned above about MPI and OpenMP applies.
An example of an adequate ''arch-local.fcm'' file would be:
<pre>
%COMPILER /my/mpi/directory/bin/mpif90
%LINK /my/mpi/directory/bin/mpif90
%AR ar
%MAKE make
%FPP_FLAGS -P -traditional
%FPP_DEF NC_DOUBLE BLAS SGEMV=DGEMV SGEMM=DGEMM
%BASE_FFLAGS -cpp -ffree-line-length-0 -fdefault-real-8
%PROD_FFLAGS -O3 -funroll-loops
%DEV_FFLAGS -g -O1 -Wall
%DEBUG_FFLAGS -g3 -Wall -fbounds-check -ffpe-trap=invalid,zero,overflow -O0 -fstack-protector-all -fbacktrace -finit-real=snan
%MPI_FFLAGS -fcray-pointer -I/my/mpi/directory/include
%OMP_FFLAGS -fopenmp -fcray-pointer
%BASE_LD -L/my/blas/directory/lib -lblas
%MPI_LD -L/my/mpi/directory/lib -lmpi
%OMP_LD -fopenmp
</pre>
And compiling the GCM would be done via
<pre>
makelmdz_fcm -arch local -parallel mpi_omp ......
</pre>
To then run LMDZ using N=4 MPI processes with X=2 tasks each (i.e.using N*X=8 cores overall) would require running the commands:
<pre>
export OMP_NUM_THREADS=2
export OMP_STACKSIZE=200M
/my/mpi/directory/bin/mpirun -np 4 gcm_32x32x39_phylmd_para_mem.e
</pre>
06/12/2021
[[Category:Parallel]]
fc9032a6b079cfdd0e82d251845923fe71ea0927
HowTo: Get the list of variables that can be outputed
0
90
174
2021-12-13T08:28:47Z
Emillour
3
Page créée avec « == Variables to output == Whether using IOIPSL or XIOS, getting a given variable to be outputed in one of the output files requires that its name (or id) is known. == The... »
wikitext
text/x-wiki
== Variables to output ==
Whether using IOIPSL or XIOS, getting a given variable to be outputed in one of the output files requires that its name (or id) is known.
== The list of model variables that can be written to an output file ==
In the ''DefLists'' subdirectory of LMDZ is the file '''field_def_lmdz.xml''' which you can browse through to identify variables. e.g.:
<pre>
<field_group id="fields_2D" grid_ref="grid_glo">
...
<field id="psol" long_name="Surface Pressure" unit="Pa" />
...
</field_group>
<field_group id="fields_3D" grid_ref="grid_glo_presnivs" >
...
<field id="vitu" long_name="Zonal wind" unit="m/s" />
...
</field_group>
</pre>
Thus, variable "psol" is the surface pressure (in Pa), variable "vitu" is the zonal wind (in m/s), etc. that you can get in output files.
13/12/2021
[[Category:HowTo]]
edec654d367947dd70ff8171fc6bc8232edb2436
LMDZ zoom parameters
0
77
175
153
2021-12-13T08:39:24Z
Emillour
3
wikitext
text/x-wiki
The "Z" in LMDZ stands for "Zoom".
This is because it is possible to define, instead of a regular longitude-latitude grid, a grid with varying mesh sizes along longitudes and latitudes.
== Zoom parameters ==
In practice one defines a "zoomed region" of interest where the resolution will be highest (and homogeneous), whereas outside this region the resolution will be low (and also homogeneous, apart from a transition region between the two). This is achieved by specifying the following parameters (usually in gcm.def):
* The zoom center coordinates (in degrees), ''clon'' and ''clat''
* The zoom factor along longitude(x)/latitude(y) directions, ''grossismx'' and ''grossismy''. These ratio represent the ratio between meshes in the zoomed region versus meshes far outside of it.
* The fraction of the zoomed region (i.e. relative to the whole planet which is 360° in longitude and 180° in latitude) along longitude (x) and latitude (y), ''dzoomx'' and ''dzoomy''. In practice the extension in longitude and latitude of the zoomed region will thus be of dzoomx*360° in longitude and dzoomy*180° in latitude
* The steepness of the mesh transition between the inner zoom and outer meshes, ''taux'' and ''tauy''. Typically one should avoid a too sharp transition; tau ~3 is a typically maximum value if running without nudging; with strong nudging harsher transitions, e.g. tau~8 or even 10 can also work.
* It is advised to target, by adjusting number of points along longitude and latitude, to have something close to a "square" mesh (i.e. same extension, in degrees, along longitudes and latitudes) in the inner zoomed area.
== Choosing an adequate time step for a zoomed simulation ==
The rule of thumb, starting from a "day_step" value that works for a give regular (non-zoomed grid):
day_step(zoom) ~ day_step(regular)*max(grossismx,grossismy)
It is also advised to check what others users have successfully used, see e.g. [[LMDZ_zoom_collection]]
24/11/2021
[[Catégorie:Zoom]]
478c6c7a807abb507b8841040a8bede367aa87eb
XIOS: Error due to too many variables in an output file
0
91
176
2021-12-13T10:20:06Z
Emillour
3
Page créée avec « == The Symptom == If LMDZ (with XIOS) crashes with the following error message: <pre> terminate called after throwing an instance of 'xios::CNetCdfException' what(): Err... »
wikitext
text/x-wiki
== The Symptom ==
If LMDZ (with XIOS) crashes with the following error message:
<pre>
terminate called after throwing an instance of 'xios::CNetCdfException'
what(): Error when calling function nc_enddef(ncId)
NetCDF: HDF error
Unable to end define mode of this file, given its id: 65536
Program received signal SIGABRT: Process abort signal.
</pre>
This is most likely due to having increased the output level of an output file and asking for too many variables.
This error is actually not due to XIOS but to the NetCDF4+HDF5 library when trying to write in parallel in a file. For some obscure reason when generating the header's metadata (containing information on all fields in the file) an error is generated in ''nc_enddef'' (finalisation of the header of the NetCDF file).
== Some Workarounds ==
* Output less variables (i.e. decrease the output level of the file and/or increase the output level of variables not needed in the outputs)
* use the serial version which seems to work : use only one process or a single XIOS server or use two levels of servers (as these, in the end, write in serial)
* use the PnetCDF (classical format) library instead of the NetCDF4+HDF5 library
Hopefully someday this NetCDF4+HDF5 bug in the library will be fixed...
13/12/2021
[[Category:ErrorMessages]]
[[Category:xios]]
f265f04b95ef9321539652b855be4f4b236efbca
WhatIs : The use filtre fft parameter
0
75
177
147
2021-12-13T10:32:08Z
Emillour
3
wikitext
text/x-wiki
== The longitudinal filter ==
To minimize stability issues due to grid size diminishing as the pole is approached, some filtering is applied to remove short wavelength (high frequency) structures along longitudes. This operation can be summarized as maintaining an effective grid resolution (along a longitude circle) to that existing at latitudes +/-60° where the longitudinal geometrical resolution is halmf of that at the equator.
== the use_filtre_fft parameter ==
In practice the filtering along a longitude circle of N points requires computations with a cost of the order of N*N. And this is the default behavior in the code. It is however possible to do the same work using efficient FFT (Fast Fourier Transform) operations, which cost less (somethings of the order of N*log(N) operations). In fact the larger N is, the more advantageous it is to use the FFT for filtering.
To activate the FFT filtering, just set
<pre>
use_filtre_fft=y
</pre>
in your run.def file. Note that the FFT filtering is only implemented in the parallel dynamical core and not the serial one.
22/11/2021
[[Category:WhatIs]]
[[Category:inputs]]
1af9add19f9df0d1216200cf2f506a8bf39401c5
Tiedke and iflag cldcon
0
12
178
22
2021-12-14T10:15:51Z
Emillour
3
wikitext
text/x-wiki
The Tiedke convection scheme (ref?) has been superseded by more advanced schemes (the "new physics"). It is however still possible to run LMDZ with it.
To run with Tiedke's convection scheme, one must set (in physiq.def)
<pre>
iflag_con=2
</pre>
In addition one must then specify a value of -2 or -1 to companion flag ''iflag_cldcon'' (also in physiq.def):
<pre>
iflag_cldcon=-2
</pre>
''iflag_cldcon=-2'' gives a better representation of low clouds radiative effect over the tropical oceans than ''iflag_cldcon=-1''.
14/12/2021
[[Category:Inputs]]
2308679e055442f6fc002dfa1e60f00efb63802a
Whatis: the libf directory
0
69
179
131
2021-12-14T10:21:10Z
Emillour
3
wikitext
text/x-wiki
The LMDZ source Fortran code is located under the libf directory of the root LMDZ directory.
The various directories (and their respective subdirectories) are there to
separate codes with various functionalities. The main driver in this
organization is to cleanly separate dynamics, physics and their
interface. In practice:
== dynamics solver related subdirectories ==
'''dyn3d''' : dynamics, serial version
'''dyn3dpar''' : dynamics, parallel version. Obsolete (many arrays remained global requiring more overall memory with increasing core number)
'''dyn3dmem''' : dynamics, parallel (optimized) version with improved memory management (all arrays are local to each core)
'''dyn3d_common''' : routines used by all dynamics (serial or parallel)
'''filtre''' : high-latitude longitudinal filter for lonxlat grid (used by the dynamics, serial or parallel)
'''grid''' : routine for model's grid generation (used by the dynamics, serial or parallel)
== physics packages related subdirectories ==
'''phy*''' : various physics packages:
- phylmd: standard terrestrial lmd physics
- phylmdiso: version with isotopes (temporary, should be merged in phylmd)
- phymar: physics of the 'modele atmospherique regional', obsolete
- phydev: 'physics that does nothing but does it well'
'''phy_common''' : common routines to all physics (different modules for parallelism, abort_physics, geometry, getin wrapper, ...)
== physics-dynamics interface ==
'''dynphy_lonlat''': contains the dynamics/physics interface with at a first level common routines to all physics and dedicated specific routines for each physics (e.g., call physics + physics initialization) in a subdirectory of the same name as the physics package's (phylmd, phydev, ...).
In addition the subdirectory stores main programs, other than the gcm, which require access to both physics and dynamics routines (e.g. to generate initial states, such as ce0l).
Note that if a physics package name is an extension of an already existing physics package (e.g. phylmdiso and phylmd) then they share the same interface (phylmd here).
'''phy*/dyn1d''': the 1D model (and links to some required dyn3d/* routines)
== others ==
'''misc''': (misceallenous) dynamics and physics independent routines which can be used by either but rely on neither (e.g. random number generator, tridiagonal matrix solver, NetCDF function wrappers, CRAY-specific routines, ...)
'''obsolete''': obsolete code not used anymore but moved and stored here for an easy quick look.
14/10/2021
[[Category:WhatIs]]
7c8b1f5d2b3ab74c7f75073ae75022794e74f6fb
HowTo: Set the value of the solar constant
0
92
180
2021-12-14T10:37:22Z
Emillour
3
Page créée avec « == The solar constant == The solar constant is the (total) solar radiation (W/m2) received at one astronomical unit (au) from the Sun == Changing/setting the solar consta... »
wikitext
text/x-wiki
== The solar constant ==
The solar constant is the (total) solar radiation (W/m2) received at one astronomical unit (au) from the Sun
== Changing/setting the solar constant ==
This is an input that can be changed by setting the appropriate flag ''solaire'' (French for "solar") in config.def, e.g.:
<pre>
solaire=1366.0896
</pre>
'''Important''': This will only be taken into account if running without the RRTM radiative transfert scheme, i.e. with
<pre>
iflag_rrtm=0
</pre>
If using RRTM then the ''solaire'' parameter is ignored as the solar constant is read from a specific input file (SOLARVOLCANOES.txt ?) unless
<pre>
ok_suntime_rrtm=n
</pre>
14/12/2021
[[Category:inputs]]
1887784733061c75ff58dcc51da08124b766ad7f
181
180
2021-12-14T10:39:28Z
Emillour
3
wikitext
text/x-wiki
== The solar constant ==
The solar constant is the (total) solar radiation (W/m2) received at one astronomical unit (au) from the Sun
== Changing/setting the solar constant ==
This is an input that can be changed by setting the appropriate flag ''solaire'' (French for "solar") in config.def, e.g.:
<pre>
solaire=1366.0896
</pre>
'''Important''': This will always be taken into account if running without the RRTM radiative transfert scheme, i.e. with
<pre>
iflag_rrtm=0
</pre>
If using RRTM then the ''solaire'' parameter is ignored as the solar constant is read from a specific input file (SOLARVOLCANOES.txt ?) unless
<pre>
ok_suntime_rrtm=n
</pre>
14/12/2021
[[Category:inputs]]
46d6b76c77466cdc1fbee68dc578296cc5e91e41
182
181
2021-12-14T10:40:14Z
Emillour
3
wikitext
text/x-wiki
== The solar constant ==
The solar constant is the (total) solar radiation (W/m2) received at one astronomical unit (au) from the Sun
== Changing/setting the solar constant ==
This is an input that can be changed by setting the appropriate flag ''solaire'' (French for "solar") in config.def, e.g.:
<pre>
solaire=1366.0896
</pre>
'''Important''': This will always be taken into account if running without the RRTM radiative transfert scheme, i.e. with
<pre>
iflag_rrtm=0
</pre>
If using RRTM (i.e. ''iflag_rrtm=1'') then the ''solaire'' parameter is ignored as the solar constant is read from a specific input file (SOLARVOLCANOES.txt ?) unless
<pre>
ok_suntime_rrtm=n
</pre>
14/12/2021
[[Category:inputs]]
56e2591fefb6a56cf472d095b6e8413e0d156873
WhatIs: The DefLists directory
0
93
183
2021-12-14T11:07:22Z
Emillour
3
Page créée avec « == the DefLists directory== The '''DefLists''' subdirectory of the ''LMDZ'' main directory contains examples of input text files used by the GCM such as: * sample "def" f... »
wikitext
text/x-wiki
== the DefLists directory==
The '''DefLists''' subdirectory of the ''LMDZ'' main directory contains examples of input text files used by the GCM such as:
* sample "def" files containing switches and parameters read at run-time by LMDZ
* sample "xml" files used by XIOS to control its outputs
* various other simple text files which may be needed by dedicated parametrizations or options
== Worth knowing ==
Only simple text files are provided in this directory. There are other inputs read in by the model (e.g. start.nc or limit.nc NetCDF files) which are not distributed with the source code.
14/12/2021
cc9f379491f49730ba035a933caa7184cedcfb80
184
183
2021-12-14T11:08:03Z
Emillour
3
wikitext
text/x-wiki
== the DefLists directory==
The '''DefLists''' subdirectory of the ''LMDZ'' main directory contains examples of input text files used by the GCM such as:
* sample "def" files containing switches and parameters read at run-time by LMDZ
* sample "xml" files used by XIOS to control its outputs
* various other simple text files which may be needed by dedicated parametrizations or options
== Worth knowing ==
Only simple text files are provided in this directory. There are other inputs read in by the model (e.g. start.nc or limit.nc NetCDF files) which are not distributed with the source code.
14/12/2021
[[Category:WhatIs]]
04219a9719ad32fafbecb639c0db5f61cac432c6
Nudging in LMDZ
0
94
185
2021-12-14T16:00:07Z
Emillour
3
Page créée avec « == The concept == Nudging is simply adding a forcing term to the GFD equation governing a variable $$V$$ to drive it towards a known value $$V_{analysis}$$ over a given ti... »
wikitext
text/x-wiki
== The concept ==
Nudging is simply adding a forcing term to the GFD equation governing a variable $$V$$ to drive it towards a known value $$V_{analysis}$$ over a given time scale $$\tau$$:
\begin{align}
\frac{\partial V}{\partial t} = \frac{\partial V}{\partial t}_{GCM} + \frac{V_{analysis}-V}{\tau}
\end{align}
Where $$V$$ can be zonal wind u, meridional wind v, relative humidity Q, pressure P or temperature T
Nudging is often used in conjunction with zoomed configurations, where strong nudging towards reanalyses in enforced outside the zoomed region.
== Nudging parameters in LMDZ ==
The master parameter to turn nudging on is ''ok_guide'' (most often all nudging parameters are put in a '''guide.def''' file included in '''run.def''') which must be set to "y" (or equivalently ".true."):
<pre>
ok_guide = y
</pre>
("guide" means "nudge" in French).
Then one must select which fields will be nudged via the ''guide_*'' parameters:
<pre>
guide_u=y
guide_v=y
guide_T=y
guide_P=n
guide_Q=n
</pre>
In the example above, nudging is done on horizontal winds (u,v) and on temperature (T) only.
In addition, the user must provide two time scales $\tau$, for each of the nudged variables; one for the inner zoom area ''tau_max_*'' and another relative to outside the zoomed area ''tau_min_*''. These time scales are stated in unit of days, e.g.
<pre>
tau_min_u= 0.0208333
tau_max_u= 10.
tau_min_v= 0.0208333
tau_max_v= 10.
tau_min_T= 0.0208333
tau_max_T= 10.
</pre>
In this example all 3 variables are nudged with a time scale of 10 days, i.e very loosely, within the zoomed region and a time scale of 30 minutes (30.*60/86400.= 0.0208333), i.e. very strongly, outside the zoomed region.
== Nudging files ==
In addition to stating which variable is nudged and the related time scales, one must provide the fields towards which to nudge (these must be on the same grid as the simulation and must be created separately, e.g. using a re-interpolation of ERA-interim files). These files must be in the directory where LMDZ runs and must be called ''u.nc'', ''v.nc'', ''T.nc'', etc.
== Nudging contribution output ==
One can request that the nudging term be stored in an output file, '''guide_ins.nc''' by setting (in guide.def):
<pre>
guide_sav=y
</pre>
14/12/2021
aed4dcd008011026c842d938184517409249898f
204
185
2022-03-28T08:57:51Z
Lfairhead
1
wikitext
text/x-wiki
== The concept ==
Nudging is simply adding a forcing term to the GFD equation governing a variable $$V$$ to drive it towards a known value $$V_{analysis}$$ over a given time scale $$\tau$$:
\begin{align}
\frac{\partial V}{\partial t} = \frac{\partial V}{\partial t}_{GCM} + \frac{V_{analysis}-V}{\tau}
\end{align}
Where $$V$$ can be zonal wind u, meridional wind v, relative humidity Q, pressure P or temperature T
Nudging is often used in conjunction with zoomed configurations, where strong nudging towards reanalyses in enforced outside the zoomed region.
== Nudging parameters in LMDZ ==
The master parameter to turn nudging on is ''ok_guide'' (most often all nudging parameters are put in a '''guide.def''' file included in '''run.def''') which must be set to "y" (or equivalently ".true."):
<pre>
ok_guide = y
</pre>
("guide" means "nudge" in French).
Then one must select which fields will be nudged via the ''guide_*'' parameters:
<pre>
guide_u=y
guide_v=y
guide_T=y
guide_P=n
guide_Q=n
</pre>
In the example above, nudging is done on horizontal winds (u,v) and on temperature (T) only.
In addition, the user must provide two time scales $\tau$, for each of the nudged variables; one for the inner zoom area ''tau_max_*'' and another relative to outside the zoomed area ''tau_min_*''. These time scales are stated in unit of days, e.g.
<pre>
tau_min_u= 0.0208333
tau_max_u= 10.
tau_min_v= 0.0208333
tau_max_v= 10.
tau_min_T= 0.0208333
tau_max_T= 10.
</pre>
In this example all 3 variables are nudged with a time scale of 10 days, i.e very loosely, within the zoomed region and a time scale of 30 minutes (30.*60/86400.= 0.0208333), i.e. very strongly, outside the zoomed region.
== Nudging files ==
In addition to stating which variable is nudged and the related time scales, one must provide the fields towards which to nudge (these must be on the same grid as the simulation and must be created separately, e.g. using a re-interpolation of ERA-interim files). These files must be in the directory where LMDZ runs and must be called ''u.nc'', ''v.nc'', ''T.nc'', etc.
== Nudging contribution output ==
One can request that the nudging term be stored in an output file, '''guide_ins.nc''' by setting (in guide.def):
<pre>
guide_sav=y
</pre>
14/12/2021
[[Category:Guidage]]
537a201bbcf2cd6d455715d0a3889e4423418b79
205
204
2022-03-28T09:05:00Z
Lfairhead
1
wikitext
text/x-wiki
== The concept ==
Nudging is simply adding a forcing term to the GFD equation governing a variable $$V$$ to drive it towards a known value $$V_{analysis}$$ over a given time scale $$\tau$$:
\begin{align}
\frac{\partial V}{\partial t} = \frac{\partial V}{\partial t}_{GCM} + \frac{V_{analysis}-V}{\tau}
\end{align}
Where $$V$$ can be zonal wind u, meridional wind v, relative humidity Q, pressure P or temperature T
Nudging is often used in conjunction with zoomed configurations, where strong nudging towards reanalyses in enforced outside the zoomed region.
== Nudging parameters in LMDZ ==
The master parameter to turn nudging on is ''ok_guide'' (most often all nudging parameters are put in a '''guide.def''' file included in '''run.def''') which must be set to "y" (or equivalently ".true."):
<pre>
ok_guide = y
</pre>
("guide" means "nudge" in French).
Then one must select which fields will be nudged via the ''guide_*'' parameters:
<pre>
guide_u=y
guide_v=y
guide_T=y
guide_P=n
guide_Q=n
</pre>
In the example above, nudging is done on horizontal winds (u,v) and on temperature (T) only.
In addition, the user must provide two time scales $\tau$, for each of the nudged variables; one for the inner zoom area ''tau_max_*'' and another relative to outside the zoomed area ''tau_min_*''. These time scales are stated in unit of days, e.g.
<pre>
tau_min_u= 0.0208333
tau_max_u= 10.
tau_min_v= 0.0208333
tau_max_v= 10.
tau_min_T= 0.0208333
tau_max_T= 10.
</pre>
In this example all 3 variables are nudged with a time scale of 10 days, i.e very loosely, within the zoomed region and a time scale of 30 minutes (30.*60/86400.= 0.0208333), i.e. very strongly, outside the zoomed region.
== Nudging files ==
In addition to stating which variable is nudged and the related time scales, one must provide the fields towards which to nudge (these must be on the same grid as the simulation and must be created separately, e.g. using a re-interpolation of ERA-interim files). These files must be in the directory where LMDZ runs and must be called ''u.nc'', ''v.nc'', ''T.nc'', etc.
== Nudging contribution output ==
One can request that the nudging term be stored in an output file, '''guide_ins.nc''' by setting (in guide.def):
<pre>
guide_sav=y
</pre>
14/12/2021
[[Category:Guidage]][[Category:Nuging]]
fb149aaad14582788f5cf526c9c46d1cc35c8fcb
206
205
2022-03-28T09:05:52Z
Lfairhead
1
wikitext
text/x-wiki
== The concept ==
Nudging is simply adding a forcing term to the GFD equation governing a variable $$V$$ to drive it towards a known value $$V_{analysis}$$ over a given time scale $$\tau$$:
\begin{align}
\frac{\partial V}{\partial t} = \frac{\partial V}{\partial t}_{GCM} + \frac{V_{analysis}-V}{\tau}
\end{align}
Where $$V$$ can be zonal wind u, meridional wind v, relative humidity Q, pressure P or temperature T
Nudging is often used in conjunction with zoomed configurations, where strong nudging towards reanalyses in enforced outside the zoomed region.
== Nudging parameters in LMDZ ==
The master parameter to turn nudging on is ''ok_guide'' (most often all nudging parameters are put in a '''guide.def''' file included in '''run.def''') which must be set to "y" (or equivalently ".true."):
<pre>
ok_guide = y
</pre>
("guide" means "nudge" in French).
Then one must select which fields will be nudged via the ''guide_*'' parameters:
<pre>
guide_u=y
guide_v=y
guide_T=y
guide_P=n
guide_Q=n
</pre>
In the example above, nudging is done on horizontal winds (u,v) and on temperature (T) only.
In addition, the user must provide two time scales $\tau$, for each of the nudged variables; one for the inner zoom area ''tau_max_*'' and another relative to outside the zoomed area ''tau_min_*''. These time scales are stated in unit of days, e.g.
<pre>
tau_min_u= 0.0208333
tau_max_u= 10.
tau_min_v= 0.0208333
tau_max_v= 10.
tau_min_T= 0.0208333
tau_max_T= 10.
</pre>
In this example all 3 variables are nudged with a time scale of 10 days, i.e very loosely, within the zoomed region and a time scale of 30 minutes (30.*60/86400.= 0.0208333), i.e. very strongly, outside the zoomed region.
== Nudging files ==
In addition to stating which variable is nudged and the related time scales, one must provide the fields towards which to nudge (these must be on the same grid as the simulation and must be created separately, e.g. using a re-interpolation of ERA-interim files). These files must be in the directory where LMDZ runs and must be called ''u.nc'', ''v.nc'', ''T.nc'', etc.
== Nudging contribution output ==
One can request that the nudging term be stored in an output file, '''guide_ins.nc''' by setting (in guide.def):
<pre>
guide_sav=y
</pre>
14/12/2021
[[Category:Guidage]][[Category:Nuging]][[Category:Guidage/Nuging]]
b94705a053447e1c66f299f81caa641f76595ad6
Discussion utilisateur:Ionela
3
95
186
2022-03-10T14:30:13Z
Ionela
5
/* HowTo : Calcul de la vraie pression à partir des niveaux hybrides sigma-pression de LMDZ */ nouvelle section
wikitext
text/x-wiki
== HowTo : Calcul de la vraie pression à partir des niveaux hybrides sigma-pression de LMDZ ==
LMDZ utilise des niveaux hybrides sigma-pression sur la verticale.
Les variables 4D (x,y,z,t) de LMDZ, comme ta, ua, va, etc sont sorties sur ces niveaux hybrides sigma-pression.
La variable "pres" contient les valeurs de pression sur chaque niveau hybride.
Pour reconstituer les vrais niveaux de pression du modele "true_presnivs", il faut utiliser les coefficients ap et bp, ainsi que la pression a la surface appellée ici "preff".
Dans la situation où les variables ap et bp sont données aux interfaces du modèle (ap et bp sont de dimension klevp1=80), on calcule "true_presnivs" par:
DO l = 1, klev
true_presnivs(l) = 0.5 *( ap(l)+bp(l)*preff + ap(l+1)+bp(l+1)*preff )
ENDDO
avec klev=79.
Dans le cas où ap et bp sont donnés aux milieux des couches (avec ap et bp de dimension klev), alors :
DO l = 1, klev
true_presnivs(l) = ap(l)+bp(l)*preff
ENDDO
La pression à la surface preff est également une variable 4D et est a priori incluse dans les fichiers 4D ( comme ta*.nc, ua*.nc, va*.nc, etc).
b115b5c80c47d3bf2b111d5e9ffd01d427a50271
187
186
2022-03-10T14:41:00Z
Ionela
5
wikitext
text/x-wiki
== HowTo : Calcul de la vraie pression à partir des niveaux hybrides sigma-pression de LMDZ ==
Les variables 4D (x,y,z,t) de LMDZ, comme ta, ua, va, etc sont sorties sur des niveaux hybrides sigma-pression.
La variable "pres" est une variable 4D (x, y, z, t) contennant les valeurs de pression de chaque maille pour chaque niveau vertical et pas de temps.
Lorsque "pres" n'est pas disponible, on peut utiliser la variable "geop" ( qui correspond au géopotentiel de chaque maille pour chaque niveau vertical et pas de temps ) et la pression à la surface pour calculer la pression sur la verticale.
Lorsque les variables "pres" ou "geop" ne sont pa disponibles, on peut reconstituer les vrais niveaux de pression du modele "true_presnivs", à l'aide des coefficients ap et bp et de la pression à la surface, variable appellée ici "preff".
Dans la situation où les variables ap et bp sont données aux interfaces du modèle (ap et bp sont de dimension klevp1=80), on calcule "true_presnivs" par:
DO l = 1, klev
true_presnivs(l) = 0.5 *( ap(l)+bp(l)*preff + ap(l+1)+bp(l+1)*preff )
ENDDO
avec klev=79.
Dans le cas où ap et bp sont donnés aux milieux des couches (avec ap et bp de dimension klev), alors :
DO l = 1, klev
true_presnivs(l) = ap(l)+bp(l)*preff
ENDDO
La pression à la surface preff est également une variable 4D et est a priori incluse dans les fichiers 4D ( comme ta*.nc, ua*.nc, va*.nc, etc).
7d5f143018cced2f2783f7a9be73a35023cb928f
188
187
2022-03-10T14:42:38Z
Ionela
5
wikitext
text/x-wiki
== HowTo : Calcul de la vraie pression à partir des niveaux hybrides sigma-pression de LMDZ ==
Les variables 4D (x,y,z,t) de LMDZ, comme ta, ua, va, etc sont sorties sur des niveaux hybrides sigma-pression.
La variable "pres" est une variable 4D (x, y, z, t) contennant les valeurs de pression de chaque maille pour chaque niveau vertical et pas de temps.
Lorsque "pres" n'est pas disponible, on peut utiliser la variable "geop" (qui correspond au géopotentiel de chaque maille pour chaque niveau vertical et pas de temps) et la pression à la surface pour calculer la pression sur la verticale.
Lorsque les variables "pres" ou "geop" ne sont pas disponibles, on peut reconstituer les vrais niveaux de pression du modele "true_presnivs", à l'aide des coefficients ap et bp et de la pression à la surface, appellée ici "preff".
Dans la situation où les variables ap et bp sont données aux interfaces du modèle (ap et bp sont de dimension klevp1=80), on calcule "true_presnivs" par:
DO l = 1, klev
true_presnivs(l) = 0.5 *( ap(l)+bp(l)*preff + ap(l+1)+bp(l+1)*preff )
ENDDO
avec klev=79.
Dans le cas où ap et bp sont donnés aux milieux des couches (avec ap et bp de dimension klev), alors :
DO l = 1, klev
true_presnivs(l) = ap(l)+bp(l)*preff
ENDDO
La pression à la surface "preff" est également une variable 4D et est a priori incluse dans les fichiers 4D (comme ta*.nc, ua*.nc, va*.nc, etc).
10f0f60649a22d438d0009c01615fc5ba2f2126c
HowTo : Calcul de la vraie pression à partir des niveaux hybrides sigma-pression de LMDZ
0
96
189
2022-03-10T14:58:23Z
Ionela
5
Page créée avec « == HowTo : Calcul de la vraie pression à partir des niveaux hybrides sigma-pression de LMDZ == Les variables 4D (x,y,z,t) de LMDZ, comme ta, ua, va, etc sont sorties sur... »
wikitext
text/x-wiki
== HowTo : Calcul de la vraie pression à partir des niveaux hybrides sigma-pression de LMDZ ==
Les variables 4D (x,y,z,t) de LMDZ, comme ta, ua, va, etc sont sorties sur des niveaux hybrides sigma-pression.
La variable "pres" est une variable 4D (x, y, z, t) contennant les valeurs de pression de chaque maille pour chaque niveau vertical et pas de temps.
Lorsque "pres" n'est pas disponible, on peut utiliser la variable "geop" (qui correspond au géopotentiel de chaque maille pour chaque niveau vertical et pas de temps) et la pression à la surface pour calculer la pression sur la verticale.
Lorsque les variables "pres" ou "geop" ne sont pas disponibles, on peut reconstituer les vrais niveaux de pression du modele "true_presnivs", à l'aide des coefficients ap et bp et de la pression à la surface, appellée ici "preff".
Dans la situation où les variables ap et bp sont données aux interfaces du modèle (ap et bp sont de dimension klevp1=80), on calcule "true_presnivs" par:
DO l = 1, klev
true_presnivs(l) = 0.5 *( ap(l)+bp(l)*preff + ap(l+1)+bp(l+1)*preff )
ENDDO
avec klev=79.
Dans le cas où ap et bp sont donnés aux milieux des couches (avec ap et bp de dimension klev), alors :
DO l = 1, klev
true_presnivs(l) = ap(l)+bp(l)*preff
ENDDO
La pression à la surface "preff" est également une variable 4D et est a priori incluse dans les fichiers 4D (comme ta*.nc, ua*.nc, va*.nc, etc).
10f0f60649a22d438d0009c01615fc5ba2f2126c
190
189
2022-03-10T15:01:42Z
Ionela
5
wikitext
text/x-wiki
== HowTo : Calcul de la vraie pression à partir des niveaux hybrides sigma-pression de LMDZ ==
Les variables 4D (x,y,z,t) de LMDZ, comme ta, ua, va, etc sont sorties sur des niveaux hybrides sigma-pression.
La variable "pres" est une variable 4D (x, y, z, t) contennant les valeurs de pression de chaque maille pour chaque niveau vertical et pas de temps.
Lorsque "pres" n'est pas disponible, on peut utiliser la variable "geop" (qui correspond au géopotentiel de chaque maille pour chaque niveau vertical et pas de temps) et la pression à la surface pour calculer la pression sur la verticale.
Lorsque les variables "pres" ou "geop" ne sont pas disponibles, on peut reconstituer les vrais niveaux de pression du modele "true_presnivs", à l'aide des coefficients ap et bp et de la pression à la surface, appellée ici "preff".
Dans la situation où les variables ap et bp sont données aux interfaces du modèle (ap et bp sont de dimension klevp1=80), on calcule "true_presnivs" par:
DO l = 1, klev
true_presnivs(l) = 0.5 *( ap(l)+bp(l)*preff + ap(l+1)+bp(l+1)*preff )
ENDDO
avec klev=79.
Dans le cas où ap et bp sont donnés aux milieux des couches (avec ap et bp de dimension klev), alors :
DO l = 1, klev
true_presnivs(l) = ap(l)+bp(l)*preff
ENDDO
La pression à la surface "preff" est également une variable 4D et est a priori incluse dans les fichiers 4D (comme ta*.nc, ua*.nc, va*.nc, etc).
[[Category:HowTo]]
a2a174279c6d7110432ba84c7a24485ba61b94aa
191
190
2022-03-10T15:10:57Z
Ionela
5
wikitext
text/x-wiki
== HowTo : Calcul de la vraie pression à partir des niveaux hybrides sigma-pression de LMDZ ==
Les variables 4D (x,y,z,t) de LMDZ, comme ta, ua, va, etc sont sorties sur des niveaux hybrides sigma-pression.
La variable 4D (x, y, z, t) "pres" contient les valeurs de pression de chaque maille pour chaque niveau vertical et pas de temps.
Lorsque "pres" n'est pas disponible, on peut utiliser la variable "geop" (qui correspond au géopotentiel de chaque maille pour chaque niveau vertical et pas de temps) et la pression à la surface pour calculer la pression sur la verticale.
Lorsque les variables "pres" ou "geop" ne sont pas disponibles, on peut reconstituer les vrais niveaux de pression du modele "true_presnivs", à l'aide des coefficients ap et bp et de la pression à la surface, appellée ici "preff".
Dans la situation où les variables ap et bp sont données aux interfaces du modèle (ap et bp sont de dimension klevp1=80), on calcule "true_presnivs" par:
DO l = 1, klev
true_presnivs(l) = 0.5 *( ap(l)+bp(l)*preff + ap(l+1)+bp(l+1)*preff )
ENDDO
avec klev=79.
Dans le cas où ap et bp sont donnés aux milieux des couches (avec ap et bp de dimension klev), alors :
DO l = 1, klev
true_presnivs(l) = ap(l)+bp(l)*preff
ENDDO
La pression à la surface "preff" est également une variable 4D et est a priori incluse dans les fichiers 4D (comme ta*.nc, ua*.nc, va*.nc, etc).
[[Category:HowTo]]
5aead707efb11195a5d34ff986dd95d67f7cb063
HowTo: Calculating the true pressure from the hybrid sigma-pressure levels of LMDZ
0
97
192
2022-03-10T15:15:30Z
Ionela
5
Page créée avec « == HowTo: Calculating the true pressure from the hybrid sigma-pressure levels of LMDZ == The 4D variables (x,y,z,t) of LMDZ, such as ta, ua, va, etc are output on hybrid... »
wikitext
text/x-wiki
== HowTo: Calculating the true pressure from the hybrid sigma-pressure levels of LMDZ ==
The 4D variables (x,y,z,t) of LMDZ, such as ta, ua, va, etc are output on hybrid sigma-pressure levels.
The 4D variable (x,y,z,t) "pres" contains the pressure values of each mesh for each vertical level and time step.
When "pres" is not available, we can use the "geop" variable (which corresponds to the geopotential of each mesh for each vertical level and time step) and the surface pressure to calculate the pressure on the vertical.
When the "pres" or "geop" variables are not available, the true pressure levels of the "true_presnivs" model can be reconstructed, using the ap and bp coefficients and the surface pressure, called "preff" here.
In the situation where the variables ap and bp are given at the interfaces of the model (ap and bp are of dimension klevp1=80), we calculate "true_presnivs" by:
DO l = 1, klev
true_presnivs(l) = 0.5 *( ap(l)+bp(l)*preff + ap(l+1)+bp(l+1)*preff )
ENDDO
with klev=79.
In the case where ap and bp are given at the middles of the layers (with ap and bp of dimension klev), then :
DO l = 1, klev
true_presnivs(l) = ap(l)+bp(l)*preff
ENDDO
The surface pressure "preff" is also a 4D variable and is a priori included in the 4D files (like ta*.nc, ua*.nc, va*.nc, etc).
[[Category:HowTo]]
68af002bac35a768fa7e3888fadc74df770d9860
Utilisateur:AdellCaesar102
2
98
193
2022-03-12T11:42:03Z
AdellCaesar102
6
Page créée avec « Hello! <br>I'm Vietnamese male :). <br>I {really }like College football!<br><br>Feel free to visit my blog post: [https://abnerbosk.com/index.php?title=Hungary_Summons_Ukr... »
wikitext
text/x-wiki
Hello! <br>I'm Vietnamese male :). <br>I {really }like College football!<br><br>Feel free to visit my blog post: [https://abnerbosk.com/index.php?title=Hungary_Summons_Ukrainian_Ambassador_Over_Raids_On_Ethnic_Hungarian... 蒙特 婁 景點]
e4d136b77966e05cdde6f8fc1578e8bb089a1219
Utilisateur:KurtD92775808
2
99
194
2022-03-12T13:53:24Z
KurtD92775808
7
Page créée avec « My name is Kurt and I am studying Japanese Studies and Business and Management at Dijon / France.<br><br>My web site ... [http://torahtree.com/index.php?title=Yes_Your_Sec... »
wikitext
text/x-wiki
My name is Kurt and I am studying Japanese Studies and Business and Management at Dijon / France.<br><br>My web site ... [http://torahtree.com/index.php?title=Yes_Your_Second_Stimulus_Check_May_Be_Smaller._Here_s_Why asus zenfone ar canada]
1ba6084afa0bc3eb22962a9dbf50301ca181a8bc
Utilisateur:MinervaWester42
2
100
195
2022-03-13T12:06:40Z
MinervaWester42
10
Page créée avec « I’m Minerva from Kansas City studying Modern Languages and Classics. I did my schooling, secured 82% and hope to find someone with same interests in Nordic skating.<br><... »
wikitext
text/x-wiki
I’m Minerva from Kansas City studying Modern Languages and Classics. I did my schooling, secured 82% and hope to find someone with same interests in Nordic skating.<br><br>Also visit my webpage; [https://iw.faithvisionnetwork.com/8482847-darius-campbell-wiki-5-facts-to-know-about-natasha-henstridges-ex-husband נטשה הנסטרידג]
b6603ab76118845a3c39b7c158425d8ffc36e48e
Utilisateur:DennisKpd7458609
2
101
196
2022-03-14T03:49:23Z
DennisKpd7458609
9
Page créée avec « I'm Bryan and I live with my husband and our 2 children in Knutwil, in the NA south part. My hobbies are RC cars, Dog sport and Squash.<br><br>Here is my page: [http://lul... »
wikitext
text/x-wiki
I'm Bryan and I live with my husband and our 2 children in Knutwil, in the NA south part. My hobbies are RC cars, Dog sport and Squash.<br><br>Here is my page: [http://lulle.sakura.ne.jp/cgi-bin/kemobook/g_book.cgi/a%C3%BFVeronica%C3%BFexternal%20nofollow?sgroup=1 sretna djeca]
fe3ea05b20760fe31f9951d28661ae6b5db58847
Utilisateur:IreneYoo848
2
102
197
2022-03-14T07:33:18Z
IreneYoo848
11
Page créée avec « Hi, everybody! My name is Irene. <br>It is a little about myself: I live in United States, my city of New York. <br>It's called often Northern or cultural capital of NY. I... »
wikitext
text/x-wiki
Hi, everybody! My name is Irene. <br>It is a little about myself: I live in United States, my city of New York. <br>It's called often Northern or cultural capital of NY. I've married 3 years ago.<br>I have 2 children - a son (Retha) and the daughter (Amee). We all like Bridge.<br><br>Here is my web site - [https://ko.homeappraisalguys.com/8084998-apex-legends-twitch-prime-loot-available-now-heres-how-to-get-it 아마존 apex]
de4732d34afeef19f54e1c0fdd4285715c7254e6
Utilisateur:Sommer6313
2
103
198
2022-03-16T15:06:38Z
Sommer6313
12
Page créée avec « Im addicted to my hobby Fishkeeping. Seems boring? Not at all!<br>I try to learn French in my spare time.<br><br>Take a look at my website ... [http://22ready.com/index.p... »
wikitext
text/x-wiki
Im addicted to my hobby Fishkeeping. Seems boring? Not at all!<br>I try to learn French in my spare time.<br><br>Take a look at my website ... [http://22ready.com/index.php/User:JoniHdy677044 sharepoint คือ]
6ee4d48ee687ddbc43a2923125af61ed302aec6f
WhatIs: The makelmdz fcm script
0
29
199
151
2022-03-21T09:52:59Z
Emillour
3
/* The makelmdz_fcm script to compile LMDZ */
wikitext
text/x-wiki
== The makelmdz_fcm script to compile LMDZ ==
The makelmdz_fcm script is the bash script that you use to compile LMDZ. This is where one sets various options (e.g which physics package to compile the model with, what grid resolution to use, etc.).
To list available options, run "makelmdz_fcm -h", which should return something like:
<pre>
Usage :
makelmdz_fcm [options] -arch nom_arch exec
[-h] : brief help
[-d [[IMx]JMx]LM] : IM, JM, LM are the dimensions in x, y, z (default: 96x72x19)
[-p PHYS] : set of physical parametrizations (in libf/phyPHYS), (default: lmd)
[-prod / -dev / -debug] : compilation mode production (default) / developement / debug
[-c false/MPI1/OMCT] : coupling with ocean model : MPI1/OMCT/false (default: false)
[-v false/orchidee2.0/orchidee1.9/true] : version of the vegetation model to include (default: false)
false : no vegetation model
orchidee2.1 : compile using ORCHIDEE 2.1 (or more recent version)
orchidee2.0 : compile using ORCHIDEE 2.0
orchidee1.9 : compile using ORCHIDEE up to the version including OpenMP in ORCHIDEE : tag 1.9-1.9.5(version AR5)-1.9.6
true : (obsolete; for backward compatibility) use ORCHIDEE tag 1.9-1.9.6
[-chimie INCA/false] : with INCA chemistry model or without (default: false)
[-cosp true/false] : compile with/without cosp package (default: false)
[-cosp2 true/false] : compile with/without cosp2 package (default: false)
[-cospv2 true/false] : compile with/without cospv2 package (default: false)
[-inlandsis true/false] : compile with/without inlandsis package (default: false)
[-rrtm true/false] : compile with/without rrtm package (default: false)
[-rad old/rrtm/ecrad] : compile with old/rrtm/ecrad radiatif code (default: old)
[-dust true/false] : compile with/without the dust package by Boucher and co (default: false)
[-strataer true/false] : compile with/without the strat aer package by Boucher and co (default: false)
[-isotopes true/false] : compile with/without water isotopes in the physics
[-isoverif true/false] : compile with/without verifications for water isotopes in the physics
[-diagiso true/false] : compile with/without special diagnostics for water isotopes in the physics
[-isotrac true/false] : compile with/without tracers of water isotopes in the physics
[-parallel none/mpi/omp/mpi_omp] : parallelism (default: none) : mpi, openmp or mixted mpi_openmp
[-g GRI] : grid configuration in dyn3d/GRI_xy.h (default: reg, inclues a zoom)
[-io ioipsl/mix/xios] : Input/Output library (default: ioipsl)
[-include INCLUDES] : extra include path to add
[-cpp CPP_KEY] : additional preprocessing definitions
[-adjnt] : adjoint model, not operational ...
[-mem] : reduced memory dynamics (obsolete flag; always on in parallel mode)
[-filtre NOMFILTRE] : use filtre from libf/NOMFILTRE (default: filtrez)
[-link LINKS] : additional links with other libraries
[-j n] : active parallel compiling on ntask
[-full] : full recompiling
[-libphy] : only compile physics package (no dynamics or main program)
[-fcm_path path] : path to the fcm tool (default: tools/fcm/bin)
[-ext_src path] : path to an additional set of routines to compile with the model
[-arch_path path] : path to architecture files (default: arch)
-arch nom_arch : target architecture
exec : executable to build
</pre>
The user must at the very least provide the name of the executable (typically "gcm") and the mandatory option "-arch" with the target architecture name (e.g. "local" or "gfortran_CICLAD").
== Some extra info about various makelmdz_fcm options ==
<pre>-d IMxJMxLM</pre>
As LMDZ works on a fixed grid (set when compiling), option "-d" is also almost always used to specify the number of grid points iimxjjmxlllm (where iim is the number of points along longitude, jjm is the number of points along latitude and llm the number of atmospheric layers).
If compiling the 1D model, then only the number of layers (llm) needs be specified, e.g. <code>-d 78</code> to compile <code>lmdz1d</code>.
<pre>-j n</pre>
With this option one can speed up compilation by letting <code>make</code> compile simultaneously (and if possible) up to <code>n</code> routines in parallel (note that this "parallel compilation" has nothing to do with the code being compiled for serial or parallel use as specified via option <code>-parallel ...</code>). In practice using <code>-j 8</code> or <code>-j 4</code> works well.
<pre>-full</pre>
Impose a full cleanup (i.e. removing past object and library files) to ensure recompiling the model from scratch.
21/03/2022
[[Category:WhatIs]]
3b3fc6bcdffe21e827d0cce9e077cfaf167d2821
200
199
2022-03-21T10:43:23Z
Emillour
3
wikitext
text/x-wiki
== The makelmdz_fcm script to compile LMDZ ==
The makelmdz_fcm script is the bash script that you use to compile LMDZ. This is where one sets various options (e.g which physics package to compile the model with, what grid resolution to use, etc.).
To list available options, run "makelmdz_fcm -h", which should return something like:
<pre>
Usage :
makelmdz_fcm [options] -arch nom_arch exec
[-h] : brief help
[-d [[IMx]JMx]LM] : IM, JM, LM are the dimensions in x, y, z (default: 96x72x19)
[-p PHYS] : set of physical parametrizations (in libf/phyPHYS), (default: lmd)
[-prod / -dev / -debug] : compilation mode production (default) / developement / debug
[-c false/MPI1/OMCT] : coupling with ocean model : MPI1/OMCT/false (default: false)
[-v false/orchidee2.0/orchidee1.9/true] : version of the vegetation model to include (default: false)
false : no vegetation model
orchidee2.1 : compile using ORCHIDEE 2.1 (or more recent version)
orchidee2.0 : compile using ORCHIDEE 2.0
orchidee1.9 : compile using ORCHIDEE up to the version including OpenMP in ORCHIDEE : tag 1.9-1.9.5(version AR5)-1.9.6
true : (obsolete; for backward compatibility) use ORCHIDEE tag 1.9-1.9.6
[-chimie INCA/false] : with INCA chemistry model or without (default: false)
[-cosp true/false] : compile with/without cosp package (default: false)
[-cosp2 true/false] : compile with/without cosp2 package (default: false)
[-cospv2 true/false] : compile with/without cospv2 package (default: false)
[-inlandsis true/false] : compile with/without inlandsis package (default: false)
[-rrtm true/false] : compile with/without rrtm package (default: false)
[-rad old/rrtm/ecrad] : compile with old/rrtm/ecrad radiatif code (default: old)
[-dust true/false] : compile with/without the dust package by Boucher and co (default: false)
[-strataer true/false] : compile with/without the strat aer package by Boucher and co (default: false)
[-isotopes true/false] : compile with/without water isotopes in the physics
[-isoverif true/false] : compile with/without verifications for water isotopes in the physics
[-diagiso true/false] : compile with/without special diagnostics for water isotopes in the physics
[-isotrac true/false] : compile with/without tracers of water isotopes in the physics
[-parallel none/mpi/omp/mpi_omp] : parallelism (default: none) : mpi, openmp or mixted mpi_openmp
[-g GRI] : grid configuration in dyn3d/GRI_xy.h (default: reg, inclues a zoom)
[-io ioipsl/mix/xios] : Input/Output library (default: ioipsl)
[-include INCLUDES] : extra include path to add
[-cpp CPP_KEY] : additional preprocessing definitions
[-adjnt] : adjoint model, not operational ...
[-mem] : reduced memory dynamics (obsolete flag; always on in parallel mode)
[-filtre NOMFILTRE] : use filtre from libf/NOMFILTRE (default: filtrez)
[-link LINKS] : additional links with other libraries
[-j n] : active parallel compiling on ntask
[-full] : full recompiling
[-libphy] : only compile physics package (no dynamics or main program)
[-fcm_path path] : path to the fcm tool (default: tools/fcm/bin)
[-ext_src path] : path to an additional set of routines to compile with the model
[-arch_path path] : path to architecture files (default: arch)
-arch nom_arch : target architecture
exec : executable to build
</pre>
The user must at the very least provide the name of the executable (typically "gcm") and the mandatory option "-arch" with the target architecture name (e.g. "local" or "gfortran_CICLAD").
== Some extra info about various makelmdz_fcm options ==
<pre>-d IMxJMxLM</pre>
As LMDZ works on a fixed grid (set when compiling), option "-d" is also almost always used to specify the number of grid points iimxjjmxlllm (where iim is the number of points along longitude, jjm is the number of points along latitude and llm the number of atmospheric layers).
If compiling the 1D model, then only the number of layers (llm) needs be specified, e.g. <code>-d 78</code> to compile <code>lmdz1d</code>.
<pre>-j n</pre>
With this option one can speed up compilation by letting <code>make</code> compile simultaneously (and if possible) up to <code>n</code> routines in parallel (note that this "parallel compilation" has nothing to do with the code being compiled for serial or parallel use as specified via option <code>-parallel ...</code>). In practice using <code>-j 8</code> or <code>-j 4</code> works well.
<pre>-parallel none/mpi/omp/mpi_omp</pre>
This option is to specify whether the model should be compiled in serial mode (default) or in parallel using MPI (<code>mpi</code>) only, or using OpenMP (<code>omp</code>) only, or both MPI and OpenMP (<code>mpi_omp</code>).
In practice, one most often needs to run in parallel and using both MPI and OpenMP, so <code>-parallel mpi_omp</code> is advised.
<pre>-io ioipsl/mix/xios</pre>
This option specifies which IO (Input/Output) library is going to be used by the model. Default is <code>-io ioipsl</code>, which is becoming depreciated for the GCM but mandatory for the 1D model. Note that when compiling with XIOS: <code>-io xios</code> on still needs to also use the IOIPSL library (which handles the reading of the run.def and companion files).
<pre>-full</pre>
Impose a full cleanup (i.e. removing past object and library files) to ensure recompiling the model from scratch.
21/03/2022
[[Category:WhatIs]]
8e9f1c90cc7ccc6c82f2e10f395c4b5c40b721b8
Création des fichiers de guidage et adaptation de l'exécution
0
51
201
86
2022-03-28T08:44:36Z
Lfairhead
1
wikitext
text/x-wiki
== Créer les fichiers de guidages ==
1 => Créer le fichier grilles_gcm.nc avec ce0l. Pour cela, avant de lancer ce0l, ajouter dans run.def :
grilles_gcm_netcdf=y
2 => Extraire les scripts pour interpolation de fichiers de guidage :
svn co http://forge.ipsl.jussieu.fr/igcmg/svn/CONFIG/LMDZOR/branches/LMDZOR_v4/CREATE/SCRIPT
3 => Recuperer les fichiers ERAI non-interpolé
4 => Interpoler avec interp_from_era.ksh. D'abord adapter qq variables en tete du script :
gridfile=chemin pour grilles_gcm.nc
indir= ou se trouver les fichier era-i
varlist="u v" : les variables a interpoler
outdir= repertoire de resultats
first_year=2011
last_year=2011
rundir= repertoire temporaire
./interp_from_era.ksh
== Adapter le run ==
5 => Crée le fichier guide.def, par exemple :
## debut guide.def
# ok_guide=y : guidage active
ok_guide=y
[[Category:guidage]]
[[Category:HowTo]]
guide_u= y
guide_v= y
guide_T= n
guide_P= n
guide_Q= n
tau_min_u=0.0208333
tau_max_u=0.125
tau_min_v=0.0208333
tau_max_v=0.125
## fin guide.def
Remarque :<br/>
Ici, dans ce guide.def, uniquement le guidage des variables u et v sont activé.<br/>
Temps de relaxation, pour une grille regulière, la valeur tau_max est utilisé, ici tau_max=0.125 => 3H.<br/>
Temps de relaxation, pour une grille zoomée, la valeur tau_max est utilisé à l'interieure de la zoom et tau_min à l'exterieur de la zoom, ici tau_min=0.0208333 => 30min.<br/>
Plus le temps de relaxation(tau) est petit, plus le guidage est fort..<br/>
6 => Ajouter en tete de run.def la prise en compte de la fichier guide.def :
INCLUDEDEF=guide.def
7 => Copier les fichier interpolé u_201101_erai.nc en u.nc et v_201101_erai.nc v.nc dans le repertoire où le modèle sera lancer :
ln -s ERAI_interp/2011/u_201101_erai.nc u.nc
ln -s ERAI_interp/2011/v_201101_erai.nc v.nc
8 => Lancer l'execution
./gcm.e > out_guide 2>&1
[[Category:Guidage]]
a74e652dc86dc4f94be60890e13b7215f8259996
MediaWiki:Sidebar
8
107
209
2022-04-04T08:39:55Z
Lfairhead
1
Page créée avec « * SEARCH * navigation ** mainpage|mainpage-description ** recentchanges-url|recentchanges ** randompage-url|randompage ** helppage|help-mediawiki * SEARCH * TOOLBOX * LAN... »
wikitext
text/x-wiki
* SEARCH
* navigation
** mainpage|mainpage-description
** recentchanges-url|recentchanges
** randompage-url|randompage
** helppage|help-mediawiki
* SEARCH
* TOOLBOX
* LANGUAGES
2997065075c386bc05a5a524e473b409a5dade54
210
209
2022-04-04T08:40:33Z
Lfairhead
1
wikitext
text/x-wiki
* navigation
** mainpage|mainpage-description
** recentchanges-url|recentchanges
** randompage-url|randompage
** helppage|help-mediawiki
* trucmuche
* SEARCH
* TOOLBOX
* LANGUAGES
44e37a14e1bcc5f476186b334b058e45fcf1a622
211
210
2022-04-04T08:41:04Z
Lfairhead
1
wikitext
text/x-wiki
* navigation
** mainpage|mainpage-description
** recentchanges-url|recentchanges
** randompage-url|randompage
** helppage|help-mediawiki
* SEARCH
* LANGUAGES
ddc509f5c21f327ed77ff3ca89bb2f7fd5e771a1
212
211
2022-04-04T08:41:34Z
Lfairhead
1
wikitext
text/x-wiki
* navigation
** mainpage|mainpage-description
** recentchanges-url|recentchanges
** randompage-url|randompage
** helppage|help-mediawiki
* SEARCH
** trucmuche
* TOOLBOX
* LANGUAGES
9ba9ff8fa86401aa87629ce1ff3b33646b48d80e
213
212
2022-04-04T08:42:09Z
Lfairhead
1
wikitext
text/x-wiki
* navigation
** mainpage|mainpage-description
** recentchanges-url|recentchanges
** randompage-url|randompage
** helppage|help-mediawiki
* SEARCH
** randompage-url|randompage
* TOOLBOX
* LANGUAGES
cdcd772596f06629502c9f4cd2543587959cec74
214
213
2022-04-04T08:42:22Z
Lfairhead
1
wikitext
text/x-wiki
* navigation
** mainpage|mainpage-description
** recentchanges-url|recentchanges
** randompage-url|randompage
** helppage|help-mediawiki
* search
** randompage-url|randompage
* TOOLBOX
* LANGUAGES
fa31adad81e5149bbd3b2fa4efafa55373193bc8
MediaWiki:Sidebar
8
107
215
214
2022-04-04T08:43:03Z
Lfairhead
1
wikitext
text/x-wiki
* navigation
** mainpage|mainpage-description
** recentchanges-url|recentchanges
** randompage-url|randompage
** helppage|help-mediawiki
* trucmuch
** mainpage|mainpage-description
* search
** randompage-url|randompage
* TOOLBOX
* LANGUAGES
f8032bd3fbe7723480fc5f5e6868b83d7482aeb3
216
215
2022-04-04T08:43:37Z
Lfairhead
1
wikitext
text/x-wiki
* navigation
** mainpage|mainpage-description
** recentchanges-url|recentchanges
** randompage-url|randompage
** helppage|help-mediawiki
* trucmuch
** mainpage|mainpage-description
* SEARCH
** randompage-url|randompage
* TOOLBOX
* LANGUAGES
e77195bd1408ed2ccbf6598792685ac371b5a558
217
216
2022-04-04T08:44:04Z
Lfairhead
1
wikitext
text/x-wiki
* navigation
** mainpage|mainpage-description
** recentchanges-url|recentchanges
** randompage-url|randompage
** helppage|help-mediawiki
* TRUCMUCH
** mainpage|mainpage-description
* SEARCH
** randompage-url|randompage
* TOOLBOX
* LANGUAGES
afd4d88c3e606ba6c8febbffcfb30e4de90a416d
218
217
2022-04-04T08:47:23Z
Lfairhead
1
wikitext
text/x-wiki
* navigation
** mainpage|mainpage-description
** recentchanges-url|recentchanges
** randompage-url|randompage
** helppage|help-mediawiki
* SEARCH
* TOOLBOX
* LANGUAGES
df7c604d036435a413d00baa4fd183f6a56b1543
ExempleMaths
0
6
219
6
2022-04-06T15:16:30Z
Lfairhead
1
wikitext
text/x-wiki
<!-- some LaTeX macros we want to use: -->
$$\newcommand{\Re}{\mathrm{Re}\,}
\newcommand{\pFq}[5]{{}_{#1}\mathrm{F}_{#2} \left( \genfrac{}{}{0pt}{}{#3}{#4} \bigg| {#5} \right)}$$
We consider, for various values of $$s$$, the $$n$$-dimensional integral
\begin{align}
\label{def:Wns}
W_n (s)
&:=
\int_{[0, 1]^n}
\left| \sum_{k = 1}^n \mathrm{e}^{2 \pi \mathrm{i} \, x_k} \right|^s \mathrm{d}\boldsymbol{x}
\end{align}
which occurs in the theory of uniform random walk integrals in the plane,
where at each step a unit-step is taken in a random direction. As such,
the integral \eqref{def:Wns} expresses the $$s$$-th moment of the distance
to the origin after $$n$$ steps.
By experimentation and some sketchy arguments we quickly conjectured and
strongly believed that, for $$k$$ a nonnegative integer
\begin{align}
\label{eq:W3k}
W_3(k) &= \Re \, \pFq32{\frac12, -\frac k2, -\frac k2}{1, 1}{4}.
\end{align}
Appropriately defined, \eqref{eq:W3k} also holds for negative odd integers.
The reason for \eqref{eq:W3k} was long a mystery, but it will be explained
at the end of the paper.
<syntaxhighlight lang="fortran">
PROGRAM Truc
IMPLICIT NONE
DO i = 1, iim
DO j = 1, jjm
.....
END DO
END DO
END PROGRAM
</syntaxhighlight>
253bae0cac9eb040d0845c6f107175bf82def4c8
XIOS: Saving or loading interpolation weights
0
108
220
2022-04-07T09:44:53Z
Emillour
3
Page créée avec « With the XIOS library one can define output domains (grid) which are different from input domains (grids), and XIOS does the necessary interpolation. This requires, once... »
wikitext
text/x-wiki
With the XIOS library one can define output domains (grid) which are different from input domains (grids), and XIOS does the necessary interpolation.
This requires, once source and destination grids are known, to compute some interpolation weights (during the initialization step). For large grids, this can take some time. One can however tell XIOS to save the interpolation weights in a file and use that file (if it is present) rather than recompute them when a new simulation is ran.
In practice one must add extra keys to the "interpolate_domain" tag, e.g.:
<pre>
<domain id="dom_256_192" type="rectilinear" ni_glo="256" nj_glo="192" >
<generate_rectilinear_domain/>
<interpolate_domain order="1" write_weight="true" mode="read_or_compute" />
</domain>
</pre>
This will automatically generate a NetCDF file containing the weights. Default file name will be something like xios_interpolation_weights_CONTEXT_INPUTDOMAIN_OUTPUTDOMAIN.nc , where CONTEXT, INPUTDOMAIN and OUTPUTDOMAIN are inherited from the context (i.e. definitions of these in the xml files).
One can specify the name of the file with the key "weight_filename", e.g.
<pre>
<domain id="dom_256_192" type="rectilinear" ni_glo="256" nj_glo="192" >
<generate_rectilinear_domain/>
<interpolate_domain order="1" write_weight="true" mode="read_or_compute" weight_filename="xios_weights" />
</domain>
</pre>
07/04/2022
[[Category:Xios]]
86ec9787633d3729ed97546c2cf31f1a8edf6af4
WhatIs: The XIOS library
0
76
221
166
2022-04-08T07:55:36Z
Emillour
3
wikitext
text/x-wiki
The [https://forge.ipsl.jussieu.fr/ioserver/wiki XIOS] (Xml I/O Server) library is based on client-server principles where the server manages the outputs asynchronously from the client (the climate model) so that the bottleneck of writing data is alleviated.
To compile with XIOS enabled, one must specify the option
<syntaxhighlight lang="bash">
-io xios
</syntaxhighlight>
to the makelmdz_fcm script.
In addition the flag
ok_all_xml=y
should be set (in the config.def file) or else the default behavior, i.e. outputs controlled and generated by the IOIPSL library, will occur.
== XIOS output controls ==
All aspects of the outputs (name, units, file, post-processing operations, etc.) are controlled by dedicated XML files which are read at run-time. Samples of xml files are provided in the "DefLists" directory.
In a nutshell:
* the master file read by XIOS is ''iodef.xml''; and contains specific XIOS parameters such as ''using_server'' to dictate whether XIOS is run in client-server mode (true) or attached (false) mode, ''info_level'' to set the verbosity of XIOS messages (0: none, 100: very verbose), ''print_file'' to set whether XIOS messages will be sent to standard output (false) or dedicated xios_*.out and xios_*.err files (true).
<syntaxhighlight lang="xml">
<variable id="using_server" type="bool">false</variable>
<variable id="info_level" type="int">0</variable>
<variable id="print_file" type="bool"> false </variable>
</syntaxhighlight>
* It is common practice to have LMDZ-related definitions and outputs in separate XML files, e.g. ''context_lmdz.xml'' which are included in ''iodef.xml'' via the ''src'' attribute, e.g.
<syntaxhighlight lang="xml">
<context id="LMDZ" src="./context_lmdz.xml"/>
</syntaxhighlight>
The ''context_lmdz.xml'' file must then contain all fields/grid/file output definitions, which may be split into multiple XML files. Current practice is to use separate ''file_def_histsomething_lmdz.xml'' files, one for each ''histsomething.nc'' file to generate, and include these in ''context_lmdz.xml'' using the ''file_definition'' key. e.g.:
<syntaxhighlight lang="xml">
<!-- Define output files
Each file contains the list of variables and their output levels -->
<file_definition src="./file_def_histday_lmdz.xml"/>
<file_definition src="./file_def_histhf_lmdz.xml"/>
<file_definition src="./file_def_histins_lmdz.xml"/>
<file_definition src="./file_def_histLES_lmdz.xml"/>
<file_definition src="./file_def_histmth_lmdz.xml"/>
</syntaxhighlight>
08/04/2021
[[Category:WhatIs]]
[[Category:Xios]]
956cdda1142d73700162bfbe515a1c830deb6168
HowTo: Using gcov (the GNU coverage tool) with LMDZ
0
109
222
2022-04-28T15:41:02Z
Lfairhead
1
Page créée avec « == HowTo: Using the GNU coverage tool gcov with LMDZ == If you want a summary of the lines (and branches) in your code that are actually executed, you can use the GNU h... »
wikitext
text/x-wiki
== HowTo: Using the GNU coverage tool gcov with LMDZ ==
If you want a summary of the lines (and branches) in your code that are actually executed, you can use the GNU [[https://gcc.gnu.org/onlinedocs/gcc/Gcov.html coverage tool]]. This entails the following three steps:
# compiling your code with the right options
# running the code to output the statistics that gcov will analyze
# running gcov on the data file created in the previous step
=== Running gcov on LMDZ ===
We will be using [[https://gcovr.com/en/stable/ gcovr]] a utility using gcov and providing different types os outputs
'''''Compiling LMDZ'''''
You will need to add the following flags to your compilation flags in the arch.fcm.file:
%BASE_FFLAGS -cpp -ffree-line-length-0 -fdefault-real-8 -DNC_DOUBLE '''-pg --coverage -fprofile-arcs -ftest-coverage -fprofile-abs-path'''
'''''Running LMDZ'''''
You just run gcm.e as you usually do. This will create a bunch of gcda and gcno files that are used by gcov in the following step
'''''Running gcovr'''''
You then launch the gcovr command as
gcovr -r . -v --html-details gcm_details libo/local_32x32x39_phylmd_seq.e/.config/tmp/
^
this is where the gcda and gcno files are saved by the compiler
to create html files
[[Category:HowTo]]
a434a2cc1d0591cee7d4174f569c37c8dfb65cef
223
222
2022-04-28T15:41:19Z
Lfairhead
1
/* HowTo: Using the GNU coverage tool gcov with LMDZ */
wikitext
text/x-wiki
If you want a summary of the lines (and branches) in your code that are actually executed, you can use the GNU [[https://gcc.gnu.org/onlinedocs/gcc/Gcov.html coverage tool]]. This entails the following three steps:
# compiling your code with the right options
# running the code to output the statistics that gcov will analyze
# running gcov on the data file created in the previous step
=== Running gcov on LMDZ ===
We will be using [[https://gcovr.com/en/stable/ gcovr]] a utility using gcov and providing different types os outputs
'''''Compiling LMDZ'''''
You will need to add the following flags to your compilation flags in the arch.fcm.file:
%BASE_FFLAGS -cpp -ffree-line-length-0 -fdefault-real-8 -DNC_DOUBLE '''-pg --coverage -fprofile-arcs -ftest-coverage -fprofile-abs-path'''
'''''Running LMDZ'''''
You just run gcm.e as you usually do. This will create a bunch of gcda and gcno files that are used by gcov in the following step
'''''Running gcovr'''''
You then launch the gcovr command as
gcovr -r . -v --html-details gcm_details libo/local_32x32x39_phylmd_seq.e/.config/tmp/
^
this is where the gcda and gcno files are saved by the compiler
to create html files
[[Category:HowTo]]
b01e978eb58cc56525ce913bdc562da24819c719
224
223
2022-04-29T11:53:05Z
Lfairhead
1
wikitext
text/x-wiki
If you want a summary of the lines (and branches) in your code that are actually executed, you can use the GNU [[https://gcc.gnu.org/onlinedocs/gcc/Gcov.html coverage tool]]. This entails the following three steps:
# compiling your code with the right options
# running the code to output the statistics that gcov will analyze
# running gcov on the data files created in the previous step to analyze the code coverage
=== Running gcov on LMDZ ===
We will be using [[https://gcovr.com/en/stable/ gcovr]] a utility using gcov and providing different types of outputs
'''''Compiling LMDZ'''''
You will need to add the following flags to your compilation flags in the arch.fcm.file:
%BASE_FFLAGS -cpp -ffree-line-length-0 -fdefault-real-8 -DNC_DOUBLE '''-pg --coverage -fprofile-arcs -ftest-coverage -fprofile-abs-path'''
'''''Running LMDZ'''''
You just run gcm.e as you usually do. This will create a bunch of gcda and gcno files that are used by gcov in the following step
'''''Running gcovr'''''
You then launch the gcovr command as
gcovr -r . -v --html-details gcm_details libo/local_32x32x39_phylmd_seq.e/.config/tmp/
^
this is where the gcda and gcno files are saved by the compiler
to create html files with the prefix <code>gcm_details</code> and the name of the routine included in the file. Each file in your code will have a corresponding html file giving the usage for each line of the routine included in that file.
[[Category:HowTo]]
26329176deeb3af6aa33bb1f9ed25d3e4369d875
225
224
2022-04-29T11:54:29Z
Lfairhead
1
wikitext
text/x-wiki
If you want a summary of the lines (and branches) in your code that are actually executed, you can use the GNU [[https://gcc.gnu.org/onlinedocs/gcc/Gcov.html coverage tool]]. This entails the following three steps:
# compiling your code with the right options
# running the code to output the statistics that gcov will analyze
# running gcov on the data files created in the previous step to analyze the code coverage
=== Running gcov on LMDZ ===
We will be using [[https://gcovr.com/en/stable/ gcovr]] a utility using gcov and providing different types of outputs
'''''Compiling LMDZ'''''
You will need to add the following flags to your compilation flags in the arch.fcm.file:
%BASE_FFLAGS -cpp -ffree-line-length-0 -fdefault-real-8 -DNC_DOUBLE '''-pg --coverage -fprofile-arcs -ftest-coverage -fprofile-abs-path'''
'''''Running LMDZ'''''
You just run gcm.e as you usually do. This will create a bunch of gcda and gcno files that are used by gcov in the following step
'''''Running gcovr'''''
You then launch the gcovr command as
gcovr -r . -v --html-details gcm_details libo/local_32x32x39_phylmd_seq.e/.config/tmp/
^
this is where the gcda and gcno files are saved by the compiler. They're created where the source files were actually compiled
to create html files with the prefix <code>gcm_details</code> and the name of the routine included in the file. Each file in your code will have a corresponding html file giving the usage for each line of the routine included in that file.
[[Category:HowTo]]
8e2c5e7b7e213eb9f15f38ee5458f891a590aac3
226
225
2022-04-29T11:56:58Z
Lfairhead
1
wikitext
text/x-wiki
If you want a summary of the lines (and branches) in your code that are actually executed, you can use the GNU [[https://gcc.gnu.org/onlinedocs/gcc/Gcov.html coverage tool]]. This entails the following three steps:
# compiling your code with the right options
# running the code to output the statistics that gcov will analyze
# running gcov on the data files created in the previous step to analyze the code coverage
=== Running gcov on LMDZ ===
We will be using [[https://gcovr.com/en/stable/ gcovr]] a utility using gcov and providing different types of outputs
'''''Compiling LMDZ'''''
You will need to add the following flags to your compilation flags in the arch.fcm.file:
%BASE_FFLAGS -cpp -ffree-line-length-0 -fdefault-real-8 -DNC_DOUBLE '''-pg --coverage -fprofile-arcs -ftest-coverage -fprofile-abs-path'''
'''''Running LMDZ'''''
You just run gcm.e as you usually do. This will create a bunch of gcda and gcno files that are used by gcov in the following step
'''''Running gcovr'''''
You then launch the gcovr command as
gcovr -r . -v --html-details gcm_details libo/local_32x32x39_phylmd_seq.e/.config/tmp/
^
this is where the gcda and gcno files are saved by the compiler. They're created where the source files were actually compiled.
to create html files with the prefix <code>gcm_details</code> and the name of the routine included in the file. Each file in your code will have a corresponding html file giving the usage for each line of the routine included in that file.
You'll find [[https://web.lmd.jussieu.fr/~fairhead/Labo/LMDZ_Coverage/sequential/example-html-details.html here]] an example of the output for the actual LMDZ code.
[[Category:HowTo]]
2610e1b7cdb9e8f5827f961a9e8250e64d7a8400
227
226
2022-05-02T08:58:14Z
Lfairhead
1
wikitext
text/x-wiki
If you want a summary of the lines (and branches) in your code that are actually executed, you can use the GNU [[https://gcc.gnu.org/onlinedocs/gcc/Gcov.html coverage tool]]. This entails the following three steps:
# compiling your code with the right options
# running the code to output the statistics that gcov will analyze
# running gcov on the data files created in the previous step to analyze the code coverage
=== Running gcov on LMDZ ===
We will be using [[https://gcovr.com/en/stable/ gcovr]] a utility using gcov and providing different types of outputs
'''''Compiling LMDZ'''''
You will need to add the following flags to your compilation flags in the arch.fcm.file:
%BASE_FFLAGS -cpp -ffree-line-length-0 -fdefault-real-8 -DNC_DOUBLE '''-pg --coverage -fprofile-arcs -ftest-coverage -fprofile-abs-path'''
....
%BASE_LD -Wl,-rpath=/data/fairhead/Test_coverage/LMDZ20211102.trunk/netcdf-4.0.1/lib '''-pg -lgcov'''
'''''Running LMDZ'''''
You just run gcm.e as you usually do. This will create a bunch of gcda and gcno files that are used by gcov in the following step
'''''Running gcovr'''''
You then launch the gcovr command as
gcovr -r . -v --html-details gcm_details libo/local_32x32x39_phylmd_seq.e/.config/tmp/
^
this is where the gcda and gcno files are saved by the compiler. They're created where the source files were actually compiled.
to create html files with the prefix <code>gcm_details</code> and the name of the routine included in the file. Each file in your code will have a corresponding html file giving the usage for each line of the routine included in that file.
You'll find [[https://web.lmd.jussieu.fr/~fairhead/Labo/LMDZ_Coverage/sequential/example-html-details.html here]] an example of the output for the actual LMDZ code.
[[Category:HowTo]]
892e0775026dabab357e62b1aef6dd98ffd1f725
Scavenging
0
110
228
2022-05-09T09:30:07Z
Lguez
4
Page créée avec « Treatment of large scale scavenging in LMDZ. Various schemes may be used depending on the value of the flag iflag_lscav: iflag_lscav=0 ==> no large scale scavenging... »
wikitext
text/x-wiki
Treatment of large scale scavenging in LMDZ.
Various schemes may be used depending on the value of the flag
iflag_lscav:
iflag_lscav=0 ==> no large scale scavenging
iflag_lscav=1 ==> Genthon (1992) scheme
iflag_lscav=2 ==> Genthon (1992) scheme modified by Ph. Heinrich
iflag_lscav=3 ==> Reddy-Boucher (2004) scheme
iflag_lscav=4 ==> Reddy-Boucher (2004) scheme modified by R. Pilon
The basic equations of the last scheme are in the appendix of:
Pilon et al (2014) Representation of transport and scavenging of trace
particles in the Emanuel moist convection scheme. Q. J. Roy. Meteorol.
Soc., 141, 1244-1258.
In the last two schemes, aerosols are scavenged in-cloud by
condensation, scavenged below-cloud by impaction, transported by
precipitation, and released by evaporation. The flux of aerosols at the
surface due to large scale precipitation (the wet deposition rate due to LS
precipitation) is presently calculated as the integral of the tendency of
aerosol concentration due to LS condensation processes. Of course this
procedure ensures that there is conservation of aerosols in the large
scale condensation scheme. However, the concentration of aerosols in the
precipitation is actually computed (variable qPrls in phytrac) and could
also be used to compute the large scale wet deposit. This is not what is
done in the present version of LMDZ.
1f0989eab9835fe6e44202ad627471382d457114
229
228
2022-05-09T09:31:09Z
Lguez
4
wikitext
text/x-wiki
Treatment of large scale scavenging in LMDZ.
Various schemes may be used depending on the value of the flag
iflag_lscav:
iflag_lscav=0 ==> no large scale scavenging
iflag_lscav=1 ==> Genthon (1992) scheme
iflag_lscav=2 ==> Genthon (1992) scheme modified by Ph. Heinrich
iflag_lscav=3 ==> Reddy-Boucher (2004) scheme
iflag_lscav=4 ==> Reddy-Boucher (2004) scheme modified by R. Pilon
The basic equations of the last scheme are in the appendix of:
Pilon et al (2014) Representation of transport and scavenging of trace
particles in the Emanuel moist convection scheme. Q. J. Roy. Meteorol.
Soc., 141, 1244-1258.
In the last two schemes, aerosols are scavenged in-cloud by
condensation, scavenged below-cloud by impaction, transported by
precipitation, and released by evaporation. The flux of aerosols at the
surface due to large scale precipitation (the wet deposition rate due to LS
precipitation) is presently calculated as the integral of the tendency of
aerosol concentration due to LS condensation processes. Of course this
procedure ensures that there is conservation of aerosols in the large
scale condensation scheme. However, the concentration of aerosols in the
precipitation is actually computed (variable qPrls in phytrac) and could
also be used to compute the large scale wet deposit. This is not what is
done in the present version of LMDZ.
Other keywords: lessivage, phytrac
86eac16bad13128f2ecae07123675e1728c424d1
230
229
2022-05-09T09:33:47Z
Lguez
4
wikitext
text/x-wiki
Treatment of large scale scavenging in LMDZ.
Various schemes may be used depending on the value of the flag
iflag_lscav:
iflag_lscav=0 ==> no large scale scavenging
iflag_lscav=1 ==> Genthon (1992) scheme
iflag_lscav=2 ==> Genthon (1992) scheme modified by Ph. Heinrich
iflag_lscav=3 ==> Reddy-Boucher (2004) scheme
iflag_lscav=4 ==> Reddy-Boucher (2004) scheme modified by R. Pilon
The basic equations of the last scheme are in the appendix of:
Pilon et al (2014) Representation of transport and scavenging of trace
particles in the Emanuel moist convection scheme. Q. J. Roy. Meteorol.
Soc., 141, 1244-1258.
In the last two schemes, aerosols are scavenged in-cloud by
condensation, scavenged below-cloud by impaction, transported by
precipitation, and released by evaporation. The flux of aerosols at the
surface due to large scale precipitation (the wet deposition rate due to LS
precipitation) is presently calculated as the integral of the tendency of
aerosol concentration due to LS condensation processes. Of course this
procedure ensures that there is conservation of aerosols in the large
scale condensation scheme. However, the concentration of aerosols in the
precipitation is actually computed (variable qPrls in phytrac) and could
also be used to compute the large scale wet deposit. This is not what is
done in the present version of LMDZ.
Original author: Jean-Yves Grandpeix
Other keywords: lessivage, phytrac
81fd0d982c4c4bc8d26fb7aa6b4943cd6c9cdff9
WhatIs: The ok strato parameter
0
83
231
162
2022-05-09T10:02:26Z
Emillour
3
wikitext
text/x-wiki
The '''ok_strato''' parameter is a logical flag, i.e. to be set to "y" (or equivalently ".true.") or "n" (or equivalently ".false.") in the run.def file, in practice most often in the "vert.def" (or sometimes "gcm.def") file, as it is strongly linked to the model vertical resolution
Setting '''ok_strato=y''' is recommended in most cases as it implies:
* Some impact on the vertical discretization (i.e. where the model levels are placed)
* Some switches on physical parametrizations related to the impact of gravity waves (orographic and non-orographic)
Running with '''ok_strato=n''' would only be useful and advised if running with simple setups such as with 19 vertical layers (with old ~CMIP3-like physics packages) or for aquaplanets or without physics (in Held&Suarez configuration).
Note also that if '''ok_strato=n''' then the sponge layer is not used either (see the leapfrog routine).
09/05/2022
[[Category:WhatIs]]
[[Category:Inputs]]
5f1d4d25f625584d47f004307d5263d8c29e9381
The sponge layer
0
81
232
159
2022-05-09T10:10:47Z
Emillour
3
wikitext
text/x-wiki
== in a nutshell ==
The sponge layer is necessary to damp vertically propagating waves, which would otherwise non-physically be reflected downward from the model top.
In practice its application is thus limited to a few of the topmost layers (usually 4), with decreasing impact with decreasing altitudes.
The sponge layer is a relaxation of main variables (winds and/or potential temperature) towards a given value or their zonal mean along a given time scale.
== Sponge layer parameters ==
The parameters controlling the sponge layer are in input file gcm.def (or sometimes in vert_L**.def as they are strongly linked to the vertical grid)
* iflag_top_bound (integer): 0 for no sponge, 1 for a sponge over the last 4 topmost layers, 2 to have a sponge layer extending over topmost layers down to a pressure which is 100 times that of the topmost layer's.
* mode_top_bound (integer): 0 for no relaxation, 1 to relax winds (u,v) to zero, 2 to relax winds (u,v) towards their zonal mean, 3 to relax winds (u,v) and potential temperature towards their zonal mean.
* tau_top_bound (real, Hz): inverse of the relaxation characteristic time scale at the topmost layer; which is then halved at each successive descending layer.
== Application of the sponge ==
The sponge is applied right after dissipation at each dissipation step, but only if the flag '''ok_strato=y'''
== Sponge routine ==
The sponge computations are done in routine '''dyn3d/top_bound.F''' (for the serial dynamical core; equivalently in '''dyn3dmem/top_bound_loc.F''' for the parallel dynamical core)
09/05/2022
[[Category:inputs]]
aa00599e653a48fba74e76f65b21b2cc7ff37470
Création des fichiers de guidage et adaptation de l'exécution
0
51
233
201
2022-05-13T11:13:32Z
Asima
14
MAJ des liens vers scripts d'interpolation et Catégories; peaufinage du texte
wikitext
text/x-wiki
== Créer les fichiers de guidage ==
1 => Créer le fichier grilles_gcm.nc avec ce0l. Pour cela, avant de lancer ce0l, ajouter dans run.def :
grilles_gcm_netcdf=y
2 => Extraire les scripts pour interpolation de fichiers de guidage :
wget http://forge.ipsl.jussieu.fr/igcmg/browser/TOOLS/INTERP_NUDGE
ou (avec ID et mdp) :
svn co http://forge.ipsl.jussieu.fr/igcmg/svn/TOOLS/INTERP_NUDGE
On utilisera interp_from_era.ksh pour fichiers ERA*, ou interp_from_TS.ksh pour séries de temps sorties du modèle.
Les choix de l'utilisateur se font dans ces scripts, qui lancent automatiquement era2gcm.ksh pour l'interpolation.
3 => Vérifier l'emplacement, la disponibilité et le droit d'accès aux fichiers non-interpolés (ERA* ou TS). Télécharger les fichiers si besoin.
4 => Interpoler avec interp_from_*.ksh :
4.a => Adapter les variables en tête du script, dans la section "USER DEFINITION":
gridfile=chemin pour grilles_gcm.nc
indir= ou se trouver les fichier era-i
varlist="u v" etc : les variables a interpoler
outdir= répertoire de resultats
first_year=2011
last_year=2011
rundir= répertoire temporaire
(for ERA*) : OutFreq='monthly' ou 'yearly' : fichiers de sortie par mois ou par année
4.b => Lancer le script ; par ex :
./interp_from_era.ksh
== Adapter le run ==
5 => Créer/adapter le fichier guide.def, par exemple :
## debut guide.def
# ok_guide=y : guidage active
ok_guide=y
[[Category:guidage]]
[[Category:HowTo]]
guide_u= y
guide_v= y
guide_T= n
guide_P= n
guide_Q= n
tau_min_u=0.0208333
tau_max_u=0.125
tau_min_v=0.0208333
tau_max_v=0.125
## fin guide.def
Remarque :<br/>
Ici, dans ce guide.def, uniquement le guidage des variables u et v sont activés.<br/>
Temps de relaxation, pour une grille régulière, la valeur tau_max est utilisé, ici tau_max=0.125 => 3H.<br/>
Temps de relaxation, pour une grille zoomée, la valeur tau_max est utilisé à l'intérieur de la zone du zoom et tau_min à l'extérieur de la zone du zoom, ici tau_min=0.0208333 => 30min.<br/>
Plus le temps de relaxation(tau) est petit, plus le guidage est fort.<br/>
6 => Ajouter en tête de run.def la prise en compte du fichier guide.def :
INCLUDEDEF=guide.def
7 => Copier (ou créer des liens vers) les fichier de guidage interpolés dans le répertoire où le modèle sera lancé, avec des noms génériques : u.nc, v.nc, T.nc, hur.nc ;
Exemple :
ln -s ERAI_interp/2011/u_201101_erai.nc u.nc
ln -s ERAI_interp/2011/v_201101_erai.nc v.nc
8 => Lancer l’exécution ; exemple :
./gcm.e > out_guide 2>&1
2022 mai 13
[[Category:Guidage]][[Category:Nuging]][[Category:Guidage/Nuging]]
a51a539c3d83df3d0afffc1a9ff4944cdef60afe
244
233
2022-05-13T16:10:17Z
Asima
14
wikitext
text/x-wiki
== Créer les fichiers de guidage ==
1 => Créer le fichier grilles_gcm.nc avec ce0l. Pour cela, avant de lancer ce0l, ajouter dans run.def :
grilles_gcm_netcdf=y
2 => Extraire les scripts pour interpolation de fichiers de guidage :
wget http://forge.ipsl.jussieu.fr/igcmg/browser/TOOLS/INTERP_NUDGE
ou (avec ID et mdp) :
svn co http://forge.ipsl.jussieu.fr/igcmg/svn/TOOLS/INTERP_NUDGE
On utilisera interp_from_era.ksh pour fichiers ERA*, ou interp_from_TS.ksh pour séries de temps sorties du modèle.
Les choix de l'utilisateur se font dans ces scripts, qui lancent automatiquement era2gcm.ksh pour l'interpolation.
3 => Vérifier l'emplacement, la disponibilité et le droit d'accès aux fichiers non-interpolés (ERA* ou TS). Télécharger les fichiers si besoin.
4 => Interpoler avec interp_from_*.ksh :
4.a => Adapter les variables en tête du script, dans la section "USER DEFINITION":
gridfile=chemin pour grilles_gcm.nc
indir= ou se trouver les fichier era-i
varlist="u v" etc : les variables a interpoler
outdir= répertoire de resultats
first_year=2011
last_year=2011
rundir= répertoire temporaire
(for ERA*) : OutFreq='monthly' ou 'yearly' : fichiers de sortie par mois ou par année
4.b => Lancer le script ; par ex :
./interp_from_era.ksh
== Adapter le run ==
5 => Créer/adapter le fichier guide.def, par exemple :
## debut guide.def
# ok_guide=y : guidage active
ok_guide=y
[[Category:guidage]]
[[Category:HowTo]]
guide_u= y
guide_v= y
guide_T= n
guide_P= n
guide_Q= n
tau_min_u=0.0208333
tau_max_u=0.125
tau_min_v=0.0208333
tau_max_v=0.125
## fin guide.def
Remarque :<br/>
Ici, dans ce guide.def, uniquement le guidage des variables u et v sont activés.<br/>
Temps de relaxation, pour une grille régulière, la valeur tau_max est utilisé, ici tau_max=0.125 => 3H.<br/>
Temps de relaxation, pour une grille zoomée, la valeur tau_max est utilisé à l'intérieur de la zone du zoom et tau_min à l'extérieur de la zone du zoom, ici tau_min=0.0208333 => 30min.<br/>
Plus le temps de relaxation(tau) est petit, plus le guidage est fort.<br/>
6 => Ajouter en tête de run.def la prise en compte du fichier guide.def :
INCLUDEDEF=guide.def
7 => Copier (ou créer des liens vers) les fichier de guidage interpolés dans le répertoire où le modèle sera lancé, avec des noms génériques : u.nc, v.nc, T.nc, hur.nc ;
Exemple :
ln -s ERAI_interp/2011/u_201101_erai.nc u.nc
ln -s ERAI_interp/2011/v_201101_erai.nc v.nc
8 => Lancer l’exécution ; exemple :
./gcm.e > out_guide 2>&1
2022 mai 13
[[Category:Guidage]]
69b0888ed387ea82b09e4a945c401cf9a5db3e3f
253
244
2022-05-16T13:18:16Z
Lfairhead
1
wikitext
text/x-wiki
== Créer les fichiers de guidage ==
1 => Créer le fichier grilles_gcm.nc avec ce0l. Pour cela, avant de lancer ce0l, ajouter dans run.def :
grilles_gcm_netcdf=y
2 => Extraire les scripts pour interpolation de fichiers de guidage :
wget http://forge.ipsl.jussieu.fr/igcmg/browser/TOOLS/INTERP_NUDGE
ou (avec ID et mdp) :
svn co http://forge.ipsl.jussieu.fr/igcmg/svn/TOOLS/INTERP_NUDGE
On utilisera interp_from_era.ksh pour fichiers ERA*, ou interp_from_TS.ksh pour séries de temps sorties du modèle.
Les choix de l'utilisateur se font dans ces scripts, qui lancent automatiquement era2gcm.ksh pour l'interpolation.
3 => Vérifier l'emplacement, la disponibilité et le droit d'accès aux fichiers non-interpolés (ERA* ou TS). Télécharger les fichiers si besoin.
4 => Interpoler avec interp_from_*.ksh :
4.a => Adapter les variables en tête du script, dans la section "USER DEFINITION":
gridfile=chemin pour grilles_gcm.nc
indir= ou se trouver les fichier era-i
varlist="u v" etc : les variables a interpoler
outdir= répertoire de resultats
first_year=2011
last_year=2011
rundir= répertoire temporaire
(for ERA*) : OutFreq='monthly' ou 'yearly' : fichiers de sortie par mois ou par année
4.b => Lancer le script ; par ex :
./interp_from_era.ksh
== Adapter le run ==
5 => Créer/adapter le fichier guide.def, par exemple :
## debut guide.def
# ok_guide=y : guidage active
ok_guide=y
[[Category:guidage]]
[[Category:HowTo]]
guide_u= y
guide_v= y
guide_T= n
guide_P= n
guide_Q= n
tau_min_u=0.0208333
tau_max_u=0.125
tau_min_v=0.0208333
tau_max_v=0.125
## fin guide.def
Remarque :<br/>
Ici, dans ce guide.def, uniquement le guidage des variables u et v sont activés.<br/>
Temps de relaxation, pour une grille régulière, la valeur tau_max est utilisé, ici tau_max=0.125 => 3H.<br/>
Temps de relaxation, pour une grille zoomée, la valeur tau_max est utilisé à l'intérieur de la zone du zoom et tau_min à l'extérieur de la zone du zoom, ici tau_min=0.0208333 => 30min.<br/>
Plus le temps de relaxation(tau) est petit, plus le guidage est fort.<br/>
6 => Ajouter en tête de run.def la prise en compte du fichier guide.def :
INCLUDEDEF=guide.def
7 => Copier (ou créer des liens vers) les fichier de guidage interpolés dans le répertoire où le modèle sera lancé, avec des noms génériques : u.nc, v.nc, T.nc, hur.nc ;
Exemple :
ln -s ERAI_interp/2011/u_201101_erai.nc u.nc
ln -s ERAI_interp/2011/v_201101_erai.nc v.nc
8 => Lancer l’exécution ; exemple :
./gcm.e > out_guide 2>&1
2022 mai 13
[[Category:Guidage]][[Category:Nudging]]
843e3e1a2baa17770a417eac585dd94fa3f4e774
254
253
2022-05-16T13:19:33Z
Lfairhead
1
wikitext
text/x-wiki
== Créer les fichiers de guidage ==
1 => Créer le fichier grilles_gcm.nc avec ce0l. Pour cela, avant de lancer ce0l, ajouter dans run.def :
grilles_gcm_netcdf=y
2 => Extraire les scripts pour interpolation de fichiers de guidage :
wget http://forge.ipsl.jussieu.fr/igcmg/browser/TOOLS/INTERP_NUDGE
ou (avec ID et mdp) :
svn co http://forge.ipsl.jussieu.fr/igcmg/svn/TOOLS/INTERP_NUDGE
On utilisera interp_from_era.ksh pour fichiers ERA*, ou interp_from_TS.ksh pour séries de temps sorties du modèle.
Les choix de l'utilisateur se font dans ces scripts, qui lancent automatiquement era2gcm.ksh pour l'interpolation.
3 => Vérifier l'emplacement, la disponibilité et le droit d'accès aux fichiers non-interpolés (ERA* ou TS). Télécharger les fichiers si besoin.
4 => Interpoler avec interp_from_*.ksh :
4.a => Adapter les variables en tête du script, dans la section "USER DEFINITION":
gridfile=chemin pour grilles_gcm.nc
indir= ou se trouver les fichier era-i
varlist="u v" etc : les variables a interpoler
outdir= répertoire de resultats
first_year=2011
last_year=2011
rundir= répertoire temporaire
(for ERA*) : OutFreq='monthly' ou 'yearly' : fichiers de sortie par mois ou par année
4.b => Lancer le script ; par ex :
./interp_from_era.ksh
== Adapter le run ==
5 => Créer/adapter le fichier guide.def, par exemple :
## debut guide.def
# ok_guide=y : guidage active
ok_guide=y
guide_u= y
guide_v= y
guide_T= n
guide_P= n
guide_Q= n
tau_min_u=0.0208333
tau_max_u=0.125
tau_min_v=0.0208333
tau_max_v=0.125
## fin guide.def
Remarque :<br/>
Ici, dans ce guide.def, uniquement le guidage des variables u et v sont activés.<br/>
Temps de relaxation, pour une grille régulière, la valeur tau_max est utilisé, ici tau_max=0.125 => 3H.<br/>
Temps de relaxation, pour une grille zoomée, la valeur tau_max est utilisé à l'intérieur de la zone du zoom et tau_min à l'extérieur de la zone du zoom, ici tau_min=0.0208333 => 30min.<br/>
Plus le temps de relaxation(tau) est petit, plus le guidage est fort.<br/>
6 => Ajouter en tête de run.def la prise en compte du fichier guide.def :
INCLUDEDEF=guide.def
7 => Copier (ou créer des liens vers) les fichier de guidage interpolés dans le répertoire où le modèle sera lancé, avec des noms génériques : u.nc, v.nc, T.nc, hur.nc ;
Exemple :
ln -s ERAI_interp/2011/u_201101_erai.nc u.nc
ln -s ERAI_interp/2011/v_201101_erai.nc v.nc
8 => Lancer l’exécution ; exemple :
./gcm.e > out_guide 2>&1
2022 mai 13
[[Category:Guidage]][[Category:Nudging]][[Category:HowTo]]
ed1f85d6f2953e24d39556efd0a8fdf87f1600ec
255
254
2022-05-16T13:21:04Z
Lfairhead
1
wikitext
text/x-wiki
== Créer les fichiers de guidage ==
1 => Créer le fichier grilles_gcm.nc avec ce0l. Pour cela, avant de lancer ce0l, ajouter dans run.def :
grilles_gcm_netcdf=y
2 => Extraire les scripts pour interpolation de fichiers de guidage :
wget http://forge.ipsl.jussieu.fr/igcmg/browser/TOOLS/INTERP_NUDGE
ou (avec ID et mdp) :
svn co http://forge.ipsl.jussieu.fr/igcmg/svn/TOOLS/INTERP_NUDGE
On utilisera interp_from_era.ksh pour fichiers ERA*, ou interp_from_TS.ksh pour séries de temps sorties du modèle.
Les choix de l'utilisateur se font dans ces scripts, qui lancent automatiquement era2gcm.ksh pour l'interpolation.
3 => Vérifier l'emplacement, la disponibilité et le droit d'accès aux fichiers non-interpolés (ERA* ou TS). Télécharger les fichiers si besoin.
4 => Interpoler avec interp_from_*.ksh :
4.a => Adapter les variables en tête du script, dans la section "USER DEFINITION":
gridfile=chemin pour grilles_gcm.nc
indir= ou se trouver les fichier era-i
varlist="u v" etc : les variables a interpoler
outdir= répertoire de resultats
first_year=2011
last_year=2011
rundir= répertoire temporaire
(for ERA*) : OutFreq='monthly' ou 'yearly' : fichiers de sortie par mois ou par année
4.b => Lancer le script ; par ex :
./interp_from_era.ksh
== Adapter le run ==
5 => Créer/adapter le fichier guide.def, par exemple :
## debut guide.def
# ok_guide=y : guidage active
ok_guide=y
guide_u= y
guide_v= y
guide_T= n
guide_P= n
guide_Q= n
tau_min_u=0.0208333
tau_max_u=0.125
tau_min_v=0.0208333
tau_max_v=0.125
## fin guide.def
Remarque :<br/>
Ici, dans ce guide.def, uniquement le guidage des variables u et v sont activés.<br/>
Temps de relaxation, pour une grille régulière, la valeur tau_max est utilisé, ici tau_max=0.125 => 3H.<br/>
Temps de relaxation, pour une grille zoomée, la valeur tau_max est utilisé à l'intérieur de la zone du zoom et tau_min à l'extérieur de la zone du zoom, ici tau_min=0.0208333 => 30min.<br/>
Plus le temps de relaxation(tau) est petit, plus le guidage est fort.<br/>
6 => Ajouter en tête de run.def la prise en compte du fichier guide.def :
INCLUDEDEF=guide.def
7 => Copier (ou créer des liens vers) les fichier de guidage interpolés dans le répertoire où le modèle sera lancé, avec des noms génériques : u.nc, v.nc, T.nc, hur.nc ;
Exemple :
ln -s ERAI_interp/2011/u_201101_erai.nc u.nc
ln -s ERAI_interp/2011/v_201101_erai.nc v.nc
8 => Lancer l’exécution ; exemple :
./gcm.e > out_guide 2>&1
2022 mai 13
[[Category:Guidage]][[Category:Nudging]][[Category:HowTo]]
b0783cca91512306334d7fe0b77a6a0f25d8298a
256
255
2022-05-16T13:27:04Z
Lfairhead
1
wikitext
text/x-wiki
== Créer les fichiers de guidage ==
1 => Créer le fichier grilles_gcm.nc avec ce0l. Pour cela, avant de lancer ce0l, ajouter dans run.def :
grilles_gcm_netcdf=y
2 => Extraire les scripts pour interpolation de fichiers de guidage :
wget http://forge.ipsl.jussieu.fr/igcmg/browser/TOOLS/INTERP_NUDGE
ou (avec ID et mdp) :
svn co http://forge.ipsl.jussieu.fr/igcmg/svn/TOOLS/INTERP_NUDGE
On utilisera interp_from_era.ksh pour fichiers ERA*, ou interp_from_TS.ksh pour séries de temps sorties du modèle.
Les choix de l'utilisateur se font dans ces scripts, qui lancent automatiquement era2gcm.ksh pour l'interpolation.
(un exemple d'utilisation de CDO pour interpoler les champs se trouve [[https://lmdz.lmd.jussieu.fr/utilisateurs/ressources/interp_from_era_nudging_with_cdo.sh/view ici]])
3 => Vérifier l'emplacement, la disponibilité et le droit d'accès aux fichiers non-interpolés (ERA* ou TS). Télécharger les fichiers si besoin.
4 => Interpoler avec interp_from_*.ksh :
4.a => Adapter les variables en tête du script, dans la section "USER DEFINITION":
gridfile=chemin pour grilles_gcm.nc
indir= ou se trouver les fichier era-i
varlist="u v" etc : les variables a interpoler
outdir= répertoire de resultats
first_year=2011
last_year=2011
rundir= répertoire temporaire
(for ERA*) : OutFreq='monthly' ou 'yearly' : fichiers de sortie par mois ou par année
4.b => Lancer le script ; par ex :
./interp_from_era.ksh
== Adapter le run ==
5 => Créer/adapter le fichier guide.def, par exemple :
## debut guide.def
# ok_guide=y : guidage active
ok_guide=y
guide_u= y
guide_v= y
guide_T= n
guide_P= n
guide_Q= n
tau_min_u=0.0208333
tau_max_u=0.125
tau_min_v=0.0208333
tau_max_v=0.125
## fin guide.def
Remarque :<br/>
Ici, dans ce guide.def, uniquement le guidage des variables u et v sont activés.<br/>
Temps de relaxation, pour une grille régulière, la valeur tau_max est utilisé, ici tau_max=0.125 => 3H.<br/>
Temps de relaxation, pour une grille zoomée, la valeur tau_max est utilisé à l'intérieur de la zone du zoom et tau_min à l'extérieur de la zone du zoom, ici tau_min=0.0208333 => 30min.<br/>
Plus le temps de relaxation(tau) est petit, plus le guidage est fort.<br/>
6 => Ajouter en tête de run.def la prise en compte du fichier guide.def :
INCLUDEDEF=guide.def
7 => Copier (ou créer des liens vers) les fichier de guidage interpolés dans le répertoire où le modèle sera lancé, avec des noms génériques : u.nc, v.nc, T.nc, hur.nc ;
Exemple :
ln -s ERAI_interp/2011/u_201101_erai.nc u.nc
ln -s ERAI_interp/2011/v_201101_erai.nc v.nc
8 => Lancer l’exécution ; exemple :
./gcm.e > out_guide 2>&1
2022 mai 13
[[Category:Guidage]][[Category:Nudging]][[Category:HowTo]]
7a26e644cd08c27dd882a70fb1f5183dab3e651e
257
256
2022-05-16T13:27:38Z
Lfairhead
1
wikitext
text/x-wiki
== Créer les fichiers de guidage ==
1 => Créer le fichier grilles_gcm.nc avec ce0l. Pour cela, avant de lancer ce0l, ajouter dans run.def :
grilles_gcm_netcdf=y
2 => Extraire les scripts pour interpolation de fichiers de guidage :
wget http://forge.ipsl.jussieu.fr/igcmg/browser/TOOLS/INTERP_NUDGE
ou (avec ID et mdp) :
svn co http://forge.ipsl.jussieu.fr/igcmg/svn/TOOLS/INTERP_NUDGE
On utilisera interp_from_era.ksh pour fichiers ERA*, ou interp_from_TS.ksh pour séries de temps sorties du modèle.
Les choix de l'utilisateur se font dans ces scripts, qui lancent automatiquement era2gcm.ksh pour l'interpolation.
(un exemple d'utilisation de CDO pour interpoler les champs se trouve [[https://lmdz.lmd.jussieu.fr/utilisateurs/ressources/interp_from_era_nudging_with_cdo.sh ici]])
3 => Vérifier l'emplacement, la disponibilité et le droit d'accès aux fichiers non-interpolés (ERA* ou TS). Télécharger les fichiers si besoin.
4 => Interpoler avec interp_from_*.ksh :
4.a => Adapter les variables en tête du script, dans la section "USER DEFINITION":
gridfile=chemin pour grilles_gcm.nc
indir= ou se trouver les fichier era-i
varlist="u v" etc : les variables a interpoler
outdir= répertoire de resultats
first_year=2011
last_year=2011
rundir= répertoire temporaire
(for ERA*) : OutFreq='monthly' ou 'yearly' : fichiers de sortie par mois ou par année
4.b => Lancer le script ; par ex :
./interp_from_era.ksh
== Adapter le run ==
5 => Créer/adapter le fichier guide.def, par exemple :
## debut guide.def
# ok_guide=y : guidage active
ok_guide=y
guide_u= y
guide_v= y
guide_T= n
guide_P= n
guide_Q= n
tau_min_u=0.0208333
tau_max_u=0.125
tau_min_v=0.0208333
tau_max_v=0.125
## fin guide.def
Remarque :<br/>
Ici, dans ce guide.def, uniquement le guidage des variables u et v sont activés.<br/>
Temps de relaxation, pour une grille régulière, la valeur tau_max est utilisé, ici tau_max=0.125 => 3H.<br/>
Temps de relaxation, pour une grille zoomée, la valeur tau_max est utilisé à l'intérieur de la zone du zoom et tau_min à l'extérieur de la zone du zoom, ici tau_min=0.0208333 => 30min.<br/>
Plus le temps de relaxation(tau) est petit, plus le guidage est fort.<br/>
6 => Ajouter en tête de run.def la prise en compte du fichier guide.def :
INCLUDEDEF=guide.def
7 => Copier (ou créer des liens vers) les fichier de guidage interpolés dans le répertoire où le modèle sera lancé, avec des noms génériques : u.nc, v.nc, T.nc, hur.nc ;
Exemple :
ln -s ERAI_interp/2011/u_201101_erai.nc u.nc
ln -s ERAI_interp/2011/v_201101_erai.nc v.nc
8 => Lancer l’exécution ; exemple :
./gcm.e > out_guide 2>&1
2022 mai 13
[[Category:Guidage]][[Category:Nudging]][[Category:HowTo]]
8572b7ab7116d5530adfc9be127916562eec7543
259
257
2022-05-19T10:53:12Z
Asima
14
wikitext
text/x-wiki
== Créer les fichiers de guidage ==
1 => Créer le fichier grilles_gcm.nc avec ce0l. Pour cela, avant de lancer ce0l, ajouter dans run.def :
grilles_gcm_netcdf=y
2 => Extraire les scripts pour interpolation de fichiers de guidage :
wget http://forge.ipsl.jussieu.fr/igcmg/browser/TOOLS/INTERP_NUDGE
ou (avec ID et mdp) :
svn co http://forge.ipsl.jussieu.fr/igcmg/svn/TOOLS/INTERP_NUDGE
On utilisera interp_from_era.ksh pour fichiers ERA*, ou interp_from_TS.ksh pour séries de temps sorties du modèle.
Les choix de l'utilisateur se font dans ces scripts, qui lancent automatiquement era2gcm.ksh pour l'interpolation.
(un exemple d'utilisation de CDO pour interpoler les champs se trouve [[https://lmdz.lmd.jussieu.fr/utilisateurs/ressources/interp_from_era_nudging_with_cdo.sh ici]])
3 => Vérifier l'emplacement, la disponibilité et le droit d'accès aux fichiers non-interpolés (ERA* ou TS). Télécharger les fichiers si besoin.
4 => Interpoler avec interp_from_*.ksh :
4.a => Adapter les variables en tête du script, dans la section "USER DEFINITION":
gridfile=chemin pour grilles_gcm.nc
indir= ou se trouver les fichier era-i
varlist="u v" etc : les variables a interpoler
outdir= répertoire de resultats
first_year=2011
last_year=2011
rundir= répertoire temporaire
(for ERA*) : OutFreq='monthly' ou 'yearly' : fichiers de sortie par mois ou par année
4.b => Lancer le script ; par ex :
./interp_from_era.ksh
== Adapter le run ==
5 => Créer/adapter le fichier guide.def, par exemple :
## debut guide.def
# ok_guide=y : guidage active
ok_guide=y
guide_u= y
guide_v= y
guide_T= n
guide_P= n
guide_Q= n
tau_min_u=0.0208333
tau_max_u=0.125
tau_min_v=0.0208333
tau_max_v=0.125
## fin guide.def
Remarque :<br/>
Ici, dans ce guide.def, uniquement le guidage des variables u et v sont activés.<br/>
Temps de relaxation, pour une grille régulière, la valeur tau_max est utilisé, ici tau_max=0.125 => 3H.<br/>
Temps de relaxation, pour une grille zoomée, la valeur tau_max est utilisé à l'intérieur de la zone du zoom et tau_min à l'extérieur de la zone du zoom, ici tau_min=0.0208333 => 30min.<br/>
Plus le temps de relaxation(tau) est petit, plus le guidage est fort.<br/>
6 => Ajouter en tête de run.def la prise en compte du fichier guide.def :
INCLUDEDEF=guide.def
7 => Copier (ou créer des liens vers) les fichier de guidage interpolés dans le répertoire où le modèle sera lancé, avec des noms génériques : u.nc, v.nc, T.nc, hur.nc ;
Exemple :
ln -s ERAI_interp/2011/u_201101_erai.nc u.nc
ln -s ERAI_interp/2011/v_201101_erai.nc v.nc
8 => Lancer l’exécution ; exemple :
./gcm.e > out_guide 2>&1
2022 mai 16
[[Category:Guidage]][[Category:Nudging]][[Category:HowTo]]
35777eb6ba2394042c48d7894f1538dec6cf44bd
261
259
2022-05-19T12:21:55Z
Asima
14
/* Adapter le run */
wikitext
text/x-wiki
== Créer les fichiers de guidage ==
1 => Créer le fichier grilles_gcm.nc avec ce0l. Pour cela, avant de lancer ce0l, ajouter dans run.def :
grilles_gcm_netcdf=y
2 => Extraire les scripts pour interpolation de fichiers de guidage :
wget http://forge.ipsl.jussieu.fr/igcmg/browser/TOOLS/INTERP_NUDGE
ou (avec ID et mdp) :
svn co http://forge.ipsl.jussieu.fr/igcmg/svn/TOOLS/INTERP_NUDGE
On utilisera interp_from_era.ksh pour fichiers ERA*, ou interp_from_TS.ksh pour séries de temps sorties du modèle.
Les choix de l'utilisateur se font dans ces scripts, qui lancent automatiquement era2gcm.ksh pour l'interpolation.
(un exemple d'utilisation de CDO pour interpoler les champs se trouve [[https://lmdz.lmd.jussieu.fr/utilisateurs/ressources/interp_from_era_nudging_with_cdo.sh ici]])
3 => Vérifier l'emplacement, la disponibilité et le droit d'accès aux fichiers non-interpolés (ERA* ou TS). Télécharger les fichiers si besoin.
4 => Interpoler avec interp_from_*.ksh :
4.a => Adapter les variables en tête du script, dans la section "USER DEFINITION":
gridfile=chemin pour grilles_gcm.nc
indir= ou se trouver les fichier era-i
varlist="u v" etc : les variables a interpoler
outdir= répertoire de resultats
first_year=2011
last_year=2011
rundir= répertoire temporaire
(for ERA*) : OutFreq='monthly' ou 'yearly' : fichiers de sortie par mois ou par année
4.b => Lancer le script ; par ex :
./interp_from_era.ksh
== Adapter le run ==
5 => Créer/adapter le fichier guide.def, par exemple :
## debut guide.def
# ok_guide=y : guidage active
ok_guide=y
(Note : avec libIGCM, mettre ok_guide=y in lmdz.card ; c'est lmdz.driver qui va changer automatiquement guide.def )
guide_u= y
guide_v= y
guide_T= n
guide_P= n
guide_Q= n
tau_min_u=0.0208333
tau_max_u=0.125
tau_min_v=0.0208333
tau_max_v=0.125
## fin guide.def
Remarque :<br/>
Ici, dans ce guide.def, uniquement le guidage des variables u et v sont activés.<br/>
Temps de relaxation, pour une grille régulière, la valeur tau_max est utilisé, ici tau_max=0.125 => 3H.<br/>
Temps de relaxation, pour une grille zoomée, la valeur tau_max est utilisé à l'intérieur de la zone du zoom et tau_min à l'extérieur de la zone du zoom, ici tau_min=0.0208333 => 30min.<br/>
Plus le temps de relaxation(tau) est petit, plus le guidage est fort.<br/>
6 => Ajouter en tête de run.def la prise en compte du fichier guide.def :
INCLUDEDEF=guide.def
7 => Copier (ou créer des liens vers) les fichier de guidage interpolés dans le répertoire où le modèle sera lancé, avec des noms génériques : u.nc, v.nc, T.nc, hur.nc ;
Exemple :
ln -s ERAI_interp/2011/u_201101_erai.nc u.nc
ln -s ERAI_interp/2011/v_201101_erai.nc v.nc
(Note : avec libIGCM, les fichiers doivent être indiqués dans lmdz.card dans la section BoundaryFiles )
8 => Lancer l’exécution ; exemple :
./gcm.e > out_guide 2>&1
2022 mai 16
[[Category:Guidage]][[Category:Nudging]][[Category:HowTo]]
0e7303d5f370b1ed3dfc4d47885ace0e6669df83
262
261
2022-05-19T12:41:18Z
Asima
14
/* Créer les fichiers de guidage */
wikitext
text/x-wiki
== Créer les fichiers de guidage ==
1 => Créer le fichier grilles_gcm.nc avec ce0l. Pour cela, avant de lancer ce0l, ajouter dans run.def :
grilles_gcm_netcdf=y
(Note : avec libIGCM, ce fichier est créé automatiquement dans $STORE/IGCM_OUT/LMDZ/EL*-$resol/ATM/Output/Grid , lorsqu'on fait tourner l'expérience CREATE pour créer les fichiers initiaux et limites pour le grid choisi - régulier ou zoomé, cf gcm.def)
2 => Extraire les scripts pour interpolation de fichiers de guidage :
wget http://forge.ipsl.jussieu.fr/igcmg/browser/TOOLS/INTERP_NUDGE
ou (avec ID et mdp) :
svn co http://forge.ipsl.jussieu.fr/igcmg/svn/TOOLS/INTERP_NUDGE
On utilisera interp_from_era.ksh pour fichiers ERA*, ou interp_from_TS.ksh pour séries de temps sorties du modèle.
Les choix de l'utilisateur se font dans ces scripts, qui lancent automatiquement era2gcm.ksh pour l'interpolation.
(un exemple d'utilisation de CDO pour interpoler les champs se trouve [[https://lmdz.lmd.jussieu.fr/utilisateurs/ressources/interp_from_era_nudging_with_cdo.sh ici]])
3 => Vérifier l'emplacement, la disponibilité et le droit d'accès aux fichiers non-interpolés (ERA* ou TS). Télécharger les fichiers si besoin.
4 => Interpoler avec interp_from_*.ksh :
4.a => Adapter les variables en tête du script, dans la section "USER DEFINITION":
gridfile=chemin pour grilles_gcm.nc
indir= ou se trouver les fichier era-i
varlist="u v" etc : les variables a interpoler
outdir= répertoire de resultats
first_year=2011
last_year=2011
rundir= répertoire temporaire
(for ERA*) : OutFreq='monthly' ou 'yearly' : fichiers de sortie par mois ou par année
4.b => Lancer le script ; par ex :
./interp_from_era.ksh
== Adapter le run ==
5 => Créer/adapter le fichier guide.def, par exemple :
## debut guide.def
# ok_guide=y : guidage active
ok_guide=y
(Note : avec libIGCM, mettre ok_guide=y in lmdz.card ; c'est lmdz.driver qui va changer automatiquement guide.def )
guide_u= y
guide_v= y
guide_T= n
guide_P= n
guide_Q= n
tau_min_u=0.0208333
tau_max_u=0.125
tau_min_v=0.0208333
tau_max_v=0.125
## fin guide.def
Remarque :<br/>
Ici, dans ce guide.def, uniquement le guidage des variables u et v sont activés.<br/>
Temps de relaxation, pour une grille régulière, la valeur tau_max est utilisé, ici tau_max=0.125 => 3H.<br/>
Temps de relaxation, pour une grille zoomée, la valeur tau_max est utilisé à l'intérieur de la zone du zoom et tau_min à l'extérieur de la zone du zoom, ici tau_min=0.0208333 => 30min.<br/>
Plus le temps de relaxation(tau) est petit, plus le guidage est fort.<br/>
6 => Ajouter en tête de run.def la prise en compte du fichier guide.def :
INCLUDEDEF=guide.def
7 => Copier (ou créer des liens vers) les fichier de guidage interpolés dans le répertoire où le modèle sera lancé, avec des noms génériques : u.nc, v.nc, T.nc, hur.nc ;
Exemple :
ln -s ERAI_interp/2011/u_201101_erai.nc u.nc
ln -s ERAI_interp/2011/v_201101_erai.nc v.nc
(Note : avec libIGCM, les fichiers doivent être indiqués dans lmdz.card dans la section BoundaryFiles )
8 => Lancer l’exécution ; exemple :
./gcm.e > out_guide 2>&1
2022 mai 16
[[Category:Guidage]][[Category:Nudging]][[Category:HowTo]]
e6950164c9efab9f2f5cf548f1b594bc156c8d86
WhatisDYNAMICO
0
111
234
2022-05-13T13:12:31Z
Dubos
15
Page créée avec « The DYNAMICO project develops a new dynamical core for LMD-Z, the atmospheric general circulation model (GCM) part of IPSL-CM Earth System Model. LMDZ6, the current versio... »
wikitext
text/x-wiki
The DYNAMICO project develops a new dynamical core for LMD-Z, the atmospheric general circulation model (GCM) part of IPSL-CM Earth System Model.
LMDZ6, the current version of [https://lmdz.lmd.jussieu.fr/ LMDZ], has a shallow-atmosphere, hydrostatic dynamical core. It is based on a latitude-longitude C-grid, a hybrid pressure-based terrain-following vertical coordinate, second-order enstrophy-conserving finite-difference discretization and positive-definite advection. Grid refinement is implemented as a continuous zoom via smooth grid stretching. An extensive package of physical paramererizations is coupled to the dynamical core. IPSL-CM is currently used to produce AR5 simulations. LMD-Z is also at the heart of GCMs of planetary atmospheres (Mars, Venus and Titan).
It is well-known that the latitude-longitude coordinates have a strong singularity at the poles which is undesirable in terms of both numerical stability and computational efficiency. Regular tesselations of the sphere such as a recursively subdivided icosahedron provide an almost-uniform grid and a path to highly parallel computations based on domain decomposition. LMD's logo is itself an icosahedron, evoking the pioneering work of Robert Sadourny on the use of icosahedral grids for solving the equations of atmospheric motion.
The main role of DYNAMICO is to re-formulate in LMD-Z the horizontal advection and dynamics on a icosahedral grid, while preserving or improving their qualities with respect to accuracy, conservation laws and wave dispersion. Efficient implementation on present and future supercomputing architectures is also a key issue addressed by DYNAMICO.
DYNAMICO is currently able to solve the hydrostatic primitive equations and participated to the DCMIP workshop held in August 2012 at NCAR. In the near future we will investigate its extension to deep-atmosphere and possibly non-hydrostatic equations following a variational approach that naturally conserves mass, energy and, in a somewhat restricted sense, potential vorticity.
A grid refinement strategy based on variable-resolution, fully unstructured meshes is under development. A broader goal is to revisit all fundamental features of the dynamical core, especially the shallow-atmosphere/traditional approximation, the vertical coordinate and the coupling with physics.
056f6cb0a335820eda4200da90ad7646d71449e4
235
234
2022-05-13T13:13:37Z
Dubos
15
wikitext
text/x-wiki
The DYNAMICO project develops a new dynamical core for LMD-Z, the atmospheric general circulation model (GCM) part of IPSL-CM Earth System Model.
LMDZ6, the current version of [https://lmdz.lmd.jussieu.fr/ LMDZ], has a shallow-atmosphere, hydrostatic dynamical core. It is based on a latitude-longitude C-grid, a hybrid pressure-based terrain-following vertical coordinate, second-order enstrophy-conserving finite-difference discretization and positive-definite advection. Grid refinement is implemented as a continuous zoom via smooth grid stretching. An extensive package of physical paramererizations is coupled to the dynamical core. IPSL-CM is currently used to produce AR5 simulations. LMD-Z is also at the heart of GCMs of planetary atmospheres (Mars, Venus and Titan).
It is well-known that the latitude-longitude coordinates have a strong singularity at the poles which is undesirable in terms of both numerical stability and computational efficiency. Regular tesselations of the sphere such as a recursively subdivided icosahedron provide an almost-uniform grid and a path to highly parallel computations based on domain decomposition. LMD's logo is itself an icosahedron, evoking the pioneering work of Robert Sadourny on the use of icosahedral grids for solving the equations of atmospheric motion.
The main role of DYNAMICO is to re-formulate in LMD-Z the horizontal advection and dynamics on a icosahedral grid, while preserving or improving their qualities with respect to accuracy, conservation laws and wave dispersion. Efficient implementation on present and future supercomputing architectures is also a key issue addressed by DYNAMICO.
DYNAMICO is currently able to solve the hydrostatic primitive equations and participated to the DCMIP workshop held in August 2012 at NCAR. In the near future we will investigate its extension to deep-atmosphere and possibly non-hydrostatic equations following a variational approach that naturally conserves mass, energy and, in a somewhat restricted sense, potential vorticity.
A grid refinement strategy based on variable-resolution, fully unstructured meshes is under development. A broader goal is to revisit all fundamental features of the dynamical core, especially the shallow-atmosphere/traditional approximation, the vertical coordinate and the coupling with physics.
[[Category:DYNAMICO]]
[[Category:]]
cf422630d5a4edc0344623f6bf2187b17f6c483a
240
235
2022-05-13T13:47:03Z
Dubos
15
wikitext
text/x-wiki
The DYNAMICO project develops a new dynamical core for LMD-Z, the atmospheric general circulation model (GCM) part of IPSL-CM Earth System Model.
LMDZ6, the current version of [https://lmdz.lmd.jussieu.fr/ LMDZ], has a shallow-atmosphere, hydrostatic dynamical core. It is based on a latitude-longitude C-grid, a hybrid pressure-based terrain-following vertical coordinate, second-order enstrophy-conserving finite-difference discretization and positive-definite advection. Grid refinement is implemented as a continuous zoom via smooth grid stretching. An extensive package of physical paramererizations is coupled to the dynamical core. IPSL-CM is currently used to produce AR5 simulations. LMD-Z is also at the heart of GCMs of planetary atmospheres (Mars, Venus and Titan).
It is well-known that the latitude-longitude coordinates have a strong singularity at the poles which is undesirable in terms of both numerical stability and computational efficiency. Regular tesselations of the sphere such as a recursively subdivided icosahedron provide an almost-uniform grid and a path to highly parallel computations based on domain decomposition. LMD's logo is itself an icosahedron, evoking the pioneering work of Robert Sadourny on the use of icosahedral grids for solving the equations of atmospheric motion.
The main role of DYNAMICO is to re-formulate in LMD-Z the horizontal advection and dynamics on a icosahedral grid, while preserving or improving their qualities with respect to accuracy, conservation laws and wave dispersion. Efficient implementation on present and future supercomputing architectures is also a key issue addressed by DYNAMICO.
DYNAMICO is currently able to solve the hydrostatic primitive equations and participated to the DCMIP workshop held in August 2012 at NCAR. In the near future we will investigate its extension to deep-atmosphere and possibly non-hydrostatic equations following a variational approach that naturally conserves mass, energy and, in a somewhat restricted sense, potential vorticity.
A grid refinement strategy based on variable-resolution, fully unstructured meshes is under development. A broader goal is to revisit all fundamental features of the dynamical core, especially the shallow-atmosphere/traditional approximation, the vertical coordinate and the coupling with physics.
[[Category:DYNAMICO]]
cae9d4a17000281b4cec6e49122fb033f3135dc3
Catégorie:DYNAMICO
14
112
236
2022-05-13T13:14:57Z
Dubos
15
Page créée avec « The DYNAMICO dynamical core. »
wikitext
text/x-wiki
The DYNAMICO dynamical core.
06700b543a76b83756fe8272cbfe3d226fe86cc4
CompilingDYNAMICO
0
113
237
2022-05-13T13:32:44Z
Dubos
15
Page créée avec « = Getting and compiling DYNAMICO = == Getting DYNAMICO == DYNAMICO is licensed under the [http://www.cecill.info/index.en.html CeCILL] open source license and should be c... »
wikitext
text/x-wiki
= Getting and compiling DYNAMICO =
== Getting DYNAMICO ==
DYNAMICO is licensed under the [http://www.cecill.info/index.en.html CeCILL] open source license and should be considered beta-stage code.
The latest version is accessible through git :
<pre>
git clone git@gitlab.in2p3.fr:ipsl/projets/dynamico/dynamico.git
git clone https://gitlab.in2p3.fr/ipsl/projets/dynamico/dynamico.git
</pre>
== Compiling DYNAMICO ==
DYNAMICO is written in Fortran 90 with some legacy code in Fortran 77. The build process is based on [http://metomi.github.io/fcm/doc/user_guide/make.html FCM]. DYNAMICO requires the NetCDF library, including the F90 modules. MPI is required for parallel execution.
DYNAMICO depends on the NetCDF and BLAS/LAPACK libraries.
The compiling process is automated but some information is needed to guide it. This information is contained in text files in source:codes/icosagcm/trunk/arch . Sample files corresponding to a few machines (Ada at IDRIS, Curie at TGCC) are present. Assuming you compile on Ada :
<pre>
cd DYNAMICO
./make_icosa -arch X64_ADA -parallel mpi -prod -job 8
</pre>
will compile DYNAMICO. The make_icosa script accepts keyword-value pairs which drive its behaviour. The most important option is arch=ARCH (here ARCH=X64_ADA). It directs make_icosa to use the information contained in :
* arch/arch-ARCH.env
* arch/arch-ARCH.fcm
* arch/arch-ARCH.path
The *.env file is a shell script that is executed by make_icosa. It sets up the environment for use by *.path. *.path defines paths to libraries and modules needed for compilation. *.fcm defines the commands used to compile, link, etc. as well as options to be passed to the compiler/linker .
The option "-job 8" is similar to "make -j 8" and compiles in parallel for speed. After a successful build the main executable is found in the bin/ directory.
== Compiling with XIOS output ==
DYNAMICO can direct its output through XIOS, a parallel I/O library and server. See https://forge.ipsl.jussieu.fr/ioserver .
To enable XIOS output :
* get and compile XIOS in a separate directory
* set the variables XIOS_INCDIR , XIOS_LIBDIR and XIOS_LIB to appropriate values in your arch.path
* use the option "-with_xios" in your "make_icosa" command
Why use XIOS :
* without XIOS, each output field is written to a separate NetCDF file. Post-processing is required to group several fields together.
* with XIOS, several fields can be written to a few output files. This behavior is controlled by the input file xios.xml (required). See https://forge.ipsl.jussieu.fr/ioserver for the syntax of this XML file.
* without XIOS, data to be written is communicated to the main MPI process, which writes to the NetCDF files while other MPI processes stay idle. This is not expected to scale to a large number of MPI processes.
* XIOS provides asynchronous, parallel I/O in order to scale to large MPI process counts.
[[Category:DYNAMICO]]
11f5c981d1ebd427dbd3306cee0a0a04e670c741
238
237
2022-05-13T13:40:54Z
Dubos
15
Getting and compiling DYNAMICO
wikitext
text/x-wiki
= Getting and compiling DYNAMICO =
== Getting DYNAMICO ==
DYNAMICO is licensed under the [http://www.cecill.info/index.en.html CeCILL] open source license.
The latest version is accessible through git :
<pre>
git clone git@gitlab.in2p3.fr:ipsl/projets/dynamico/dynamico.git
git clone https://gitlab.in2p3.fr/ipsl/projets/dynamico/dynamico.git
</pre>
== Compiling DYNAMICO ==
DYNAMICO is written in Fortran 90 with some legacy code in Fortran 77. The build process is based on [http://metomi.github.io/fcm/doc/user_guide/make.html FCM]. DYNAMICO requires the NetCDF library, including the F90 modules. MPI is required for parallel execution.
DYNAMICO depends on the NetCDF and BLAS/LAPACK libraries.
The compiling process is automated but some information is needed to guide it. This information is contained in text files in source:codes/icosagcm/trunk/arch . Sample files corresponding to a few machines (Ada at IDRIS, Curie at TGCC) are present. Assuming you compile on Ada :
<pre>
cd DYNAMICO
./make_icosa -arch X64_ADA -parallel mpi -prod -job 8
</pre>
will compile DYNAMICO. The make_icosa script accepts keyword-value pairs which drive its behaviour. The most important option is arch=ARCH (here ARCH=X64_ADA). It directs make_icosa to use the information contained in :
* arch/arch-ARCH.env
* arch/arch-ARCH.fcm
* arch/arch-ARCH.path
The *.env file is a shell script that is executed by make_icosa. It sets up the environment for use by *.path. *.path defines paths to libraries and modules needed for compilation. *.fcm defines the commands used to compile, link, etc. as well as options to be passed to the compiler/linker .
The option "-job 8" is similar to "make -j 8" and compiles in parallel for speed. After a successful build the main executable is found in the bin/ directory.
== Compiling with XIOS output ==
DYNAMICO can direct its output through XIOS, a parallel I/O library and server. See https://forge.ipsl.jussieu.fr/ioserver .
To enable XIOS output :
* get and compile XIOS in a separate directory
* set the variables XIOS_INCDIR , XIOS_LIBDIR and XIOS_LIB to appropriate values in your arch.path
* use the option "-with_xios" in your "make_icosa" command
Why use XIOS :
* without XIOS, each output field is written to a separate NetCDF file. Post-processing is required to group several fields together.
* with XIOS, several fields can be written to a few output files. This behavior is controlled by the input file xios.xml (required). See https://forge.ipsl.jussieu.fr/ioserver for the syntax of this XML file.
* without XIOS, data to be written is communicated to the main MPI process, which writes to the NetCDF files while other MPI processes stay idle. This is not expected to scale to a large number of MPI processes.
* XIOS provides asynchronous, parallel I/O in order to scale to large MPI process counts.
[[Category:DYNAMICO]]
da70c38b0f05768ba783260c60dae18613524305
239
238
2022-05-13T13:42:09Z
Dubos
15
/* Compiling DYNAMICO */
wikitext
text/x-wiki
= Getting and compiling DYNAMICO =
== Getting DYNAMICO ==
DYNAMICO is licensed under the [http://www.cecill.info/index.en.html CeCILL] open source license.
The latest version is accessible through git :
<pre>
git clone git@gitlab.in2p3.fr:ipsl/projets/dynamico/dynamico.git
git clone https://gitlab.in2p3.fr/ipsl/projets/dynamico/dynamico.git
</pre>
== Compiling DYNAMICO ==
DYNAMICO is written in Fortran 2003. The build process is based on [http://metomi.github.io/fcm/doc/user_guide/make.html FCM]. DYNAMICO requires the NetCDF library, including the F90 modules. MPI is required for parallel execution and XIOS for asynchronous I/O.
DYNAMICO depends on the NetCDF and BLAS/LAPACK libraries.
The compiling process is automated but some information is needed to guide it. This information is contained in text files in source:codes/icosagcm/trunk/arch . Sample files corresponding to a few machines (Ada at IDRIS, Curie at TGCC) are present. Assuming you compile on Ada :
<pre>
cd DYNAMICO
./make_icosa -arch X64_ADA -parallel mpi -prod -job 8
</pre>
will compile DYNAMICO. The make_icosa script accepts keyword-value pairs which drive its behaviour. The most important option is arch=ARCH (here ARCH=X64_ADA). It directs make_icosa to use the information contained in :
* arch/arch-ARCH.env
* arch/arch-ARCH.fcm
* arch/arch-ARCH.path
The *.env file is a shell script that is executed by make_icosa. It sets up the environment for use by *.path. *.path defines paths to libraries and modules needed for compilation. *.fcm defines the commands used to compile, link, etc. as well as options to be passed to the compiler/linker .
The option "-job 8" is similar to "make -j 8" and compiles in parallel for speed. After a successful build the main executable is found in the bin/ directory.
== Compiling with XIOS output ==
DYNAMICO can direct its output through XIOS, a parallel I/O library and server. See https://forge.ipsl.jussieu.fr/ioserver .
To enable XIOS output :
* get and compile XIOS in a separate directory
* set the variables XIOS_INCDIR , XIOS_LIBDIR and XIOS_LIB to appropriate values in your arch.path
* use the option "-with_xios" in your "make_icosa" command
Why use XIOS :
* without XIOS, each output field is written to a separate NetCDF file. Post-processing is required to group several fields together.
* with XIOS, several fields can be written to a few output files. This behavior is controlled by the input file xios.xml (required). See https://forge.ipsl.jussieu.fr/ioserver for the syntax of this XML file.
* without XIOS, data to be written is communicated to the main MPI process, which writes to the NetCDF files while other MPI processes stay idle. This is not expected to scale to a large number of MPI processes.
* XIOS provides asynchronous, parallel I/O in order to scale to large MPI process counts.
[[Category:DYNAMICO]]
1537650a2de82196c431f618de8721f9e58b5a35
RunningDYNAMICO
0
114
241
2022-05-13T13:47:22Z
Dubos
15
Page créée avec « = Running DYNAMICO = DYNAMICO can produce a rather large amount of output. It is therefore recommended to prepare a separate directory for each numerical experiment on a... »
wikitext
text/x-wiki
= Running DYNAMICO =
DYNAMICO can produce a rather large amount of output. It is therefore recommended to prepare a separate directory for each numerical experiment on a filesystem of adequate capacity.
In this directory, copy the executable icosa_gcm.exe. You will find it in DYNAMICO/bin/, where DYNAMICO is the main directory containing the source code.
You will also need configuration files that define resolution, initial condition, etc. Sample files can be found in subdirectories of [source:codes/icosagcm/trunk/param_sets DYNAMICO/param_sets]. Copy the *.def files from the desired sub-directory. There is typically run.def and earth_const.def . run.def is the main configuration file and includes earth_const.def
Currently DYNAMICO generates its own grid. It can run idealized test cases which define their own initial conditions. In that case no other input files are needed beyond *.def and, if using XIOS, *.xml files controlling XIOS behavior. It may also restart from a previous run, reading from a restart file.
== IMPORTANT ==
Make sure you set
<pre>
ulimit -s unlimited
</pre>
before running DYNAMICO in order to avoid stack overflows (segmentation faults) due to large automatic arrays. With OpenMP:
<pre>
export OMP_STACK_SIZE=100M
</pre>
or a larger value if necessary.
== Running DYNAMICO as a primitive equation solver ==
By default DYNAMICO solves the traditional, shallow-atmosphere, hydrostatic equations. An example is provided in [source:codes/icosagcm/trunk/param_sets/dcmip2012/ dcmip2012/test4/test4.1/test4.1-0 ]. This example runs a dry baroclinic instability test case (Jablonowski & Williamson, 2006). Sample configuration files for the climate-like Held and Suarez (1994) benchmark can be found in [source:codes/icosagcm/trunk/param_sets/climate/Held_Suarez climate/Held_Suarez ]
== Horizontal resolution ==
Horizontal resolution is controlled by the parameter nbp defined in run.def. The total number of hexagonal cells is about 10 x nbp x nbp, corresponding to subdividing each main triangle of the icosahedron in nbp x nbp sub-triangles (there are about twice as many triangles as there are hexagons).
Notice that, everything else being equal, the time step (dt) should be inversely proportional to nbp for numerical stability.
== Parallel computing with DYNAMICO ==
DYNAMICO can run in parallel by dividing the icosahedral mesh into tiles. There are at least 10 tiles corresponding to the 20 faces of the icosahedron joined in pairs to form rhombi. These 10 rhombi are further subdivided in nsplit_i x nsplit_j tiles. nsplit_i and nsplit_j are defined in run.def . nsplit_X needs not divide nbp exactly.
To run DYNAMICO on a parallel machine, you must first compile it with OpenMPI and/or MPI. Then use mpirun or the equivalent command to run it.
There must be less MPIxOpenMP processes than the 10 x nsplit_i x nsplit_j tiles. There can be more tiles than processes, in which case each process will take care of several tiles.
[[Category:DYNAMICO]]
2133df263e1407f28fccddd49d702a996f784667
242
241
2022-05-13T13:52:11Z
Dubos
15
/* Running DYNAMICO */
wikitext
text/x-wiki
= Running DYNAMICO =
DYNAMICO can produce a rather large amount of output. It is therefore recommended to prepare a separate directory for each numerical experiment on a filesystem of adequate capacity.
In this directory, copy the executable icosa_gcm.exe. You will find it in DYNAMICO/bin/, where DYNAMICO is the main directory containing the source code.
You will also need configuration files that define resolution, initial condition, etc. Sample files can be found in subdirectories of [source:codes/icosagcm/trunk/param_sets DYNAMICO/param_sets]. Copy the *.def files from the desired sub-directory. There is typically run.def and earth_const.def . run.def is the main configuration file and includes earth_const.def
Currently DYNAMICO generates its own grid. It can run idealized test cases which define their own initial conditions. In that case no other input files are needed beyond *.def and, if using XIOS, *.xml files controlling XIOS behavior. It may also restart from a previous run, reading from a restart file.
== IMPORTANT ==
Make sure you set
<pre>
ulimit -s unlimited
</pre>
before running DYNAMICO in order to avoid stack overflows (segmentation faults) due to large automatic arrays. With OpenMP:
<pre>
export OMP_STACK_SIZE=100M
</pre>
or a larger value if necessary.
== Running DYNAMICO as a primitive equation solver ==
By default DYNAMICO solves the traditional, shallow-atmosphere, hydrostatic equations. An example is provided in [https://gitlab.in2p3.fr/ipsl/projets/dynamico/dynamico/-/blob/trunk2master/param_sets/dcmip2012/run41.def param_sets/dcmip2012/run41.def]. This example runs a dry baroclinic instability test case (Jablonowski & Williamson, 2006). Sample configuration files for the climate-like Held and Suarez (1994) benchmark can be found in [https://gitlab.in2p3.fr/ipsl/projets/dynamico/dynamico/-/tree/trunk2master/param_sets/climate/Held_Suarez param_sets/climate/Held_Suarez]
== Horizontal resolution ==
Horizontal resolution is controlled by the parameter nbp defined in run.def. The total number of hexagonal cells is about 10 x nbp x nbp, corresponding to subdividing each main triangle of the icosahedron in nbp x nbp sub-triangles (there are about twice as many triangles as there are hexagons).
Notice that, everything else being equal, the time step (dt) should be inversely proportional to nbp for numerical stability.
== Parallel computing with DYNAMICO ==
DYNAMICO can run in parallel by dividing the icosahedral mesh into tiles. There are at least 10 tiles corresponding to the 20 faces of the icosahedron joined in pairs to form rhombi. These 10 rhombi are further subdivided in nsplit_i x nsplit_j tiles. nsplit_i and nsplit_j are defined in run.def . nsplit_X needs not divide nbp exactly.
To run DYNAMICO on a parallel machine, you must first compile it with OpenMPI and/or MPI. Then use mpirun or the equivalent command to run it.
There must be less MPIxOpenMP processes than the 10 x nsplit_i x nsplit_j tiles. There can be more tiles than processes, in which case each process will take care of several tiles.
[[Category:DYNAMICO]]
a6c5b9b0f0134abb36b4d048fc49cf24bd484e90
Nudging in LMDZ
0
94
243
206
2022-05-13T16:04:14Z
Asima
14
wikitext
text/x-wiki
== The concept ==
Nudging is simply adding a forcing term to the GFD equation governing a variable $$V$$ to drive it towards a known value $$V_{analysis}$$ over a given time scale $$\tau$$:
\begin{align}
\frac{\partial V}{\partial t} = \frac{\partial V}{\partial t}_{GCM} + \frac{V_{analysis}-V}{\tau}
\end{align}
Where $$V$$ can be zonal wind u, meridional wind v, relative humidity Q, pressure P or temperature T
Nudging is often used in conjunction with zoomed configurations, where strong nudging towards reanalyses in enforced outside the zoomed region.
== Nudging parameters in LMDZ ==
The master parameter to turn nudging on is ''ok_guide'' (most often all nudging parameters are put in a '''guide.def''' file included in '''run.def''') which must be set to "y" (or equivalently ".true."):
<pre>
ok_guide = y
</pre>
("guide" means "nudge" in French).
Then one must select which fields will be nudged via the ''guide_*'' parameters:
<pre>
guide_u=y
guide_v=y
guide_T=y
guide_P=n
guide_Q=n
</pre>
In the example above, nudging is done on horizontal winds (u,v) and on temperature (T) only.
In addition, the user must provide two time scales $\tau$, for each of the nudged variables; one for the inner zoom area ''tau_max_*'' and another relative to outside the zoomed area ''tau_min_*''. These time scales are stated in unit of days, e.g.
<pre>
tau_min_u= 0.0208333
tau_max_u= 10.
tau_min_v= 0.0208333
tau_max_v= 10.
tau_min_T= 0.0208333
tau_max_T= 10.
</pre>
In this example all 3 variables are nudged with a time scale of 10 days, i.e very loosely, within the zoomed region and a time scale of 30 minutes (30.*60/86400.= 0.0208333), i.e. very strongly, outside the zoomed region.
== Nudging files ==
In addition to stating which variable is nudged and the related time scales, one must provide the fields towards which to nudge (these must be on the same grid as the simulation and must be created separately, e.g. using a re-interpolation of ERA-interim files). These files must be in the directory where LMDZ runs and must be called ''u.nc'', ''v.nc'', ''T.nc'', etc.
== Nudging contribution output ==
One can request that the nudging term be stored in an output file, '''guide_ins.nc''' by setting (in guide.def):
<pre>
guide_sav=y
</pre>
14/12/2021
[[Category:Guidage]]
537a201bbcf2cd6d455715d0a3889e4423418b79
245
243
2022-05-13T17:59:34Z
Asima
14
/* The concept */
wikitext
text/x-wiki
== The concept ==
''For indepth theoretical explanations, see this doc in French (dated 2009, some code détails are obsolete): https://lmdz.lmd.jussieu.fr/le-coin-des-developpeurs/notes-techniques/ressources/guidage_LMDZ.pdf''
Nudging is simply adding a forcing term to the GFD equation governing a variable $$V$$ to drive it towards a known value $$V_{analysis}$$ over a given time scale $$\tau$$:
\begin{align}
\frac{\partial V}{\partial t} = \frac{\partial V}{\partial t}_{GCM} + \frac{V_{analysis}-V}{\tau}
\end{align}
Where $$V$$ can be zonal wind u, meridional wind v, relative humidity Q, pressure P or temperature T
Nudging is often used in conjunction with zoomed configurations, where strong nudging towards reanalyses in enforced outside the zoomed region.
== Nudging parameters in LMDZ ==
The master parameter to turn nudging on is ''ok_guide'' (most often all nudging parameters are put in a '''guide.def''' file included in '''run.def''') which must be set to "y" (or equivalently ".true."):
<pre>
ok_guide = y
</pre>
("guide" means "nudge" in French).
Then one must select which fields will be nudged via the ''guide_*'' parameters:
<pre>
guide_u=y
guide_v=y
guide_T=y
guide_P=n
guide_Q=n
</pre>
In the example above, nudging is done on horizontal winds (u,v) and on temperature (T) only.
In addition, the user must provide two time scales $\tau$, for each of the nudged variables; one for the inner zoom area ''tau_max_*'' and another relative to outside the zoomed area ''tau_min_*''. These time scales are stated in unit of days, e.g.
<pre>
tau_min_u= 0.0208333
tau_max_u= 10.
tau_min_v= 0.0208333
tau_max_v= 10.
tau_min_T= 0.0208333
tau_max_T= 10.
</pre>
In this example all 3 variables are nudged with a time scale of 10 days, i.e very loosely, within the zoomed region and a time scale of 30 minutes (30.*60/86400.= 0.0208333), i.e. very strongly, outside the zoomed region.
== Nudging files ==
In addition to stating which variable is nudged and the related time scales, one must provide the fields towards which to nudge (these must be on the same grid as the simulation and must be created separately, e.g. using a re-interpolation of ERA-interim files). These files must be in the directory where LMDZ runs and must be called ''u.nc'', ''v.nc'', ''T.nc'', etc.
== Nudging contribution output ==
One can request that the nudging term be stored in an output file, '''guide_ins.nc''' by setting (in guide.def):
<pre>
guide_sav=y
</pre>
14/12/2021
[[Category:Guidage]]
23e429c13fa0a36f7c103c4eb9b9b859243a23ff
246
245
2022-05-16T09:58:08Z
Emillour
3
wikitext
text/x-wiki
== The concept ==
''For indepth theoretical explanations, see this doc in French (dated 2009, some code détails are obsolete): https://lmdz.lmd.jussieu.fr/le-coin-des-developpeurs/notes-techniques/ressources/guidage_LMDZ.pdf''
Nudging is simply adding a forcing term to the GFD equation governing a variable $$V$$ to drive it towards a known value $$V_{analysis}$$ over a given time scale $$\tau$$:
\begin{align}
\frac{\partial V}{\partial t} = \frac{\partial V}{\partial t}_{GCM} + \frac{V_{analysis}-V}{\tau}
\end{align}
Where $$V$$ can be zonal wind u, meridional wind v, relative humidity Q, pressure P or temperature T
Nudging is often used in conjunction with zoomed configurations, where strong nudging towards reanalyses in enforced outside the zoomed region.
== Nudging parameters in LMDZ ==
The master parameter to turn nudging on is ''ok_guide'' (most often all nudging parameters are put in a '''guide.def''' file included in '''run.def''') which must be set to "y" (or equivalently ".true."):
<pre>
ok_guide = y
</pre>
("guide" means "nudge" in French).
Then one must select which fields will be nudged via the ''guide_*'' parameters:
<pre>
guide_u=y
guide_v=y
guide_T=y
guide_P=n
guide_Q=n
</pre>
In the example above, nudging is done on horizontal winds (u,v) and on temperature (T) only.
In addition, the user must provide two time scales $\tau$, for each of the nudged variables; one for the inner zoom area ''tau_max_*'' and another relative to outside the zoomed area ''tau_min_*''. These time scales are stated in unit of days, e.g.
<pre>
tau_min_u= 0.0208333
tau_max_u= 10.
tau_min_v= 0.0208333
tau_max_v= 10.
tau_min_T= 0.0208333
tau_max_T= 10.
</pre>
In this example all 3 variables are nudged with a time scale of 10 days, i.e very loosely, within the zoomed region and a time scale of 30 minutes (30.*60/86400.= 0.0208333), i.e. very strongly, outside the zoomed region.
== Nudging files ==
In addition to stating which variable is nudged and the related time scales, one must provide the fields towards which to nudge (these must be on the same grid as the simulation and must be created separately, e.g. using a re-interpolation of ERA-interim files). These files must be in the directory where LMDZ runs and must be called ''u.nc'', ''v.nc'', ''T.nc'', etc.
== Nudging contribution output ==
One can request that the nudging term be stored in an output file, '''guide_ins.nc''' by setting (in guide.def):
<pre>
guide_sav=y
</pre>
14/12/2021
[[Category:Nudging|Guidage]]
8eccd25457673a41490ee7b7a1f1ba86040604db
247
246
2022-05-16T10:01:32Z
Emillour
3
wikitext
text/x-wiki
== The concept ==
''For indepth theoretical explanations, see this doc in French (dated 2009, some code détails are obsolete): https://lmdz.lmd.jussieu.fr/le-coin-des-developpeurs/notes-techniques/ressources/guidage_LMDZ.pdf''
Nudging is simply adding a forcing term to the GFD equation governing a variable $$V$$ to drive it towards a known value $$V_{analysis}$$ over a given time scale $$\tau$$:
\begin{align}
\frac{\partial V}{\partial t} = \frac{\partial V}{\partial t}_{GCM} + \frac{V_{analysis}-V}{\tau}
\end{align}
Where $$V$$ can be zonal wind u, meridional wind v, relative humidity Q, pressure P or temperature T
Nudging is often used in conjunction with zoomed configurations, where strong nudging towards reanalyses in enforced outside the zoomed region.
== Nudging parameters in LMDZ ==
The master parameter to turn nudging on is ''ok_guide'' (most often all nudging parameters are put in a '''guide.def''' file included in '''run.def''') which must be set to "y" (or equivalently ".true."):
<pre>
ok_guide = y
</pre>
("guide" means "nudge" in French).
Then one must select which fields will be nudged via the ''guide_*'' parameters:
<pre>
guide_u=y
guide_v=y
guide_T=y
guide_P=n
guide_Q=n
</pre>
In the example above, nudging is done on horizontal winds (u,v) and on temperature (T) only.
In addition, the user must provide two time scales $\tau$, for each of the nudged variables; one for the inner zoom area ''tau_max_*'' and another relative to outside the zoomed area ''tau_min_*''. These time scales are stated in unit of days, e.g.
<pre>
tau_min_u= 0.0208333
tau_max_u= 10.
tau_min_v= 0.0208333
tau_max_v= 10.
tau_min_T= 0.0208333
tau_max_T= 10.
</pre>
In this example all 3 variables are nudged with a time scale of 10 days, i.e very loosely, within the zoomed region and a time scale of 30 minutes (30.*60/86400.= 0.0208333), i.e. very strongly, outside the zoomed region.
== Nudging files ==
In addition to stating which variable is nudged and the related time scales, one must provide the fields towards which to nudge (these must be on the same grid as the simulation and must be created separately, e.g. using a re-interpolation of ERA-interim files). These files must be in the directory where LMDZ runs and must be called ''u.nc'', ''v.nc'', ''T.nc'', etc.
== Nudging contribution output ==
One can request that the nudging term be stored in an output file, '''guide_ins.nc''' by setting (in guide.def):
<pre>
guide_sav=y
</pre>
14/12/2021
[[Category:Nudging]]
[[Category:Guidage]]
8c30b6f5719c58c41a8508f8c4ec59c67cfdc058
250
247
2022-05-16T13:06:05Z
Lfairhead
1
wikitext
text/x-wiki
== The concept ==
''For indepth theoretical explanations, see this doc in French (dated 2009, some code détails are obsolete): https://lmdz.lmd.jussieu.fr/le-coin-des-developpeurs/notes-techniques/ressources/guidage_LMDZ.pdf''
Nudging is simply adding a forcing term to the GFD equation governing a variable $$V$$ to drive it towards a known value $$V_{analysis}$$ over a given time scale $$\tau$$:
\begin{align}
\frac{\partial V}{\partial t} = \frac{\partial V}{\partial t}_{GCM} + \frac{V_{analysis}-V}{\tau}
\end{align}
Where $$V$$ can be zonal wind u, meridional wind v, relative humidity Q, pressure P or temperature T
Nudging is often used in conjunction with zoomed configurations, where strong nudging towards reanalyses in enforced outside the zoomed region.
== Nudging parameters in LMDZ ==
The master parameter to turn nudging on is ''ok_guide'' (most often all nudging parameters are put in a '''guide.def''' file included in '''run.def''') which must be set to "y" (or equivalently ".true."):
<pre>
ok_guide = y
</pre>
("guide" means "nudge" in French).
Then one must select which fields will be nudged via the ''guide_*'' parameters:
<pre>
guide_u=y
guide_v=y
guide_T=y
guide_P=n
guide_Q=n
</pre>
In the example above, nudging is done on horizontal winds (u,v) and on temperature (T) only.
In addition, the user must provide two time scales $\tau$, for each of the nudged variables; one for the inner zoom area ''tau_max_*'' and another relative to outside the zoomed area ''tau_min_*''. These time scales are stated in unit of days, e.g.
<pre>
tau_min_u= 0.0208333
tau_max_u= 10.
tau_min_v= 0.0208333
tau_max_v= 10.
tau_min_T= 0.0208333
tau_max_T= 10.
</pre>
In this example all 3 variables are nudged with a time scale of 10 days, i.e very loosely, within the zoomed region and a time scale of 30 minutes (30.*60/86400.= 0.0208333), i.e. very strongly, outside the zoomed region.
'''''Caution''''':
=== Ne pas confondre constante de rappel et fréquence d'appel au guidage ===
Quand on guide :
# On lit les champs typiquement toutes les 6 heures (suivant la disponibiité des champs de guidage).
# On interpole linéairement en temps les champs de guidage.
# On rappelle à chaque pas de temps vers ces champs interpolés avec une constante définie dans guide.def avec les tau_min tau_max.
mais "je nudge à chaque pas de temps".
== Nudging files ==
In addition to stating which variable is nudged and the related time scales, one must provide the fields towards which to nudge (these must be on the same grid as the simulation and must be created separately, e.g. using a re-interpolation of ERA-interim files). These files must be in the directory where LMDZ runs and must be called ''u.nc'', ''v.nc'', ''T.nc'', etc.
== Nudging contribution output ==
One can request that the nudging term be stored in an output file, '''guide_ins.nc''' by setting (in guide.def):
<pre>
guide_sav=y
</pre>
14/12/2021
[[Category:Nudging]]
[[Category:Guidage]]
fc66f20fe59ee602275e35f41220facfa2d1f262
251
250
2022-05-16T13:13:02Z
Lfairhead
1
wikitext
text/x-wiki
== The concept ==
''For indepth theoretical explanations, see this doc in French (dated 2009, some code détails are obsolete): https://lmdz.lmd.jussieu.fr/le-coin-des-developpeurs/notes-techniques/ressources/guidage_LMDZ.pdf''
Nudging is simply adding a forcing term to the GFD equation governing a variable $$V$$ to drive it towards a known value $$V_{analysis}$$ over a given time scale $$\tau$$:
\begin{align}
\frac{\partial V}{\partial t} = \frac{\partial V}{\partial t}_{GCM} + \frac{V_{analysis}-V}{\tau}
\end{align}
Where $$V$$ can be zonal wind u, meridional wind v, relative humidity Q, pressure P or temperature T
Nudging is often used in conjunction with zoomed configurations, where strong nudging towards reanalyses in enforced outside the zoomed region.
== Nudging parameters in LMDZ ==
The master parameter to turn nudging on is ''ok_guide'' (most often all nudging parameters are put in a '''guide.def''' file included in '''run.def''') which must be set to "y" (or equivalently ".true."):
<pre>
ok_guide = y
</pre>
("guide" means "nudge" in French).
Then one must select which fields will be nudged via the ''guide_*'' parameters:
<pre>
guide_u=y
guide_v=y
guide_T=y
guide_P=n
guide_Q=n
</pre>
In the example above, nudging is done on horizontal winds (u,v) and on temperature (T) only.
In addition, the user must provide two time scales $\tau$, for each of the nudged variables; one for the inner zoom area ''tau_max_*'' and another relative to outside the zoomed area ''tau_min_*''. These time scales are stated in unit of days, e.g.
<pre>
tau_min_u= 0.0208333
tau_max_u= 10.
tau_min_v= 0.0208333
tau_max_v= 10.
tau_min_T= 0.0208333
tau_max_T= 10.
</pre>
In this example all 3 variables are nudged with a time scale of 10 days, i.e very loosely, within the zoomed region and a time scale of 30 minutes (30.*60/86400.= 0.0208333), i.e. very strongly, outside the zoomed region.
'''''Caution''''':
==== Ne pas confondre constante de rappel et fréquence d'appel au guidage ====
Quand on guide :
# On lit les champs typiquement toutes les 6 heures (suivant la disponibiité des champs de guidage).
# On interpole linéairement en temps les champs de guidage.
# On rappelle à chaque pas de temps vers ces champs interpolés avec une constante définie dans guide.def avec les tau_min tau_max.
mais "je nudge à chaque pas de temps".
== Nudging files ==
In addition to stating which variable is nudged and the related time scales, one must provide the fields towards which to nudge (these must be on the same grid as the simulation and must be created separately, e.g. using a re-interpolation of ERA-interim files). These files must be in the directory where LMDZ runs and must be called ''u.nc'', ''v.nc'', ''T.nc'', etc.
== Nudging contribution output ==
One can request that the nudging term be stored in an output file, '''guide_ins.nc''' by setting (in guide.def):
<pre>
guide_sav=y
</pre>
== Nudging towards the wind zonal mean ==
Quelques précisions :
* Par défaut, on lit un état de guidage 4x / jour, pareil pour l'interpolation sur les niveaux du modèle. Mais ça peut être modifié (paramètres iguide_read, iguide_int).
* Il y a une option au cas où (guide_2D) pour lire un état de guidage 2D (latitude - Pression) et pas 3D.
* L'option guide_zon veut dire qu'on a un terme de rappel qui est uniforme suivant les longitudes :
** on calcule (u-ug) en chaque point
** puis on fait la moyenne zonale de ce nudging. ug n'est pas forcément symétrique ici, mais comme c'est linéaire...
Attention aux interférences avec guide_reg, le plus simple étant peut-être
de commenter les lignes "if guide_reg..." dans la routine guide_zonave.
Ne pas confondre constante de rappel et fréquence d'appel au guidage
14/12/2021
[[Category:Nudging]]
[[Category:Guidage]]
3c8ee09cb626fb66dbf2b8732d349e45d9877643
252
251
2022-05-16T13:16:36Z
Lfairhead
1
wikitext
text/x-wiki
== The concept ==
''For indepth theoretical explanations, see this doc in French (dated 2009, some code détails are obsolete): https://lmdz.lmd.jussieu.fr/le-coin-des-developpeurs/notes-techniques/ressources/guidage_LMDZ.pdf''
Nudging is simply adding a forcing term to the GFD equation governing a variable $$V$$ to drive it towards a known value $$V_{analysis}$$ over a given time scale $$\tau$$:
\begin{align}
\frac{\partial V}{\partial t} = \frac{\partial V}{\partial t}_{GCM} + \frac{V_{analysis}-V}{\tau}
\end{align}
Where $$V$$ can be zonal wind u, meridional wind v, relative humidity Q, pressure P or temperature T
Nudging is often used in conjunction with zoomed configurations, where strong nudging towards reanalyses in enforced outside the zoomed region.
== Nudging parameters in LMDZ ==
The master parameter to turn nudging on is ''ok_guide'' (most often all nudging parameters are put in a '''guide.def''' file included in '''run.def''') which must be set to "y" (or equivalently ".true."):
<pre>
ok_guide = y
</pre>
("guide" means "nudge" in French).
Then one must select which fields will be nudged via the ''guide_*'' parameters:
<pre>
guide_u=y
guide_v=y
guide_T=y
guide_P=n
guide_Q=n
</pre>
In the example above, nudging is done on horizontal winds (u,v) and on temperature (T) only.
In addition, the user must provide two time scales $\tau$, for each of the nudged variables; one for the inner zoom area ''tau_max_*'' and another relative to outside the zoomed area ''tau_min_*''. These time scales are stated in unit of days, e.g.
<pre>
tau_min_u= 0.0208333
tau_max_u= 10.
tau_min_v= 0.0208333
tau_max_v= 10.
tau_min_T= 0.0208333
tau_max_T= 10.
</pre>
In this example all 3 variables are nudged with a time scale of 10 days, i.e very loosely, within the zoomed region and a time scale of 30 minutes (30.*60/86400.= 0.0208333), i.e. very strongly, outside the zoomed region.
'''''Caution''''':
==== Ne pas confondre constante de rappel et fréquence d'appel au guidage ====
Quand on guide :
# On lit les champs typiquement toutes les 6 heures (suivant la disponibiité des champs de guidage).
# On interpole linéairement en temps les champs de guidage.
# On rappelle à chaque pas de temps vers ces champs interpolés avec une constante définie dans guide.def avec les tau_min tau_max.
mais "je nudge à chaque pas de temps".
== Nudging files ==
In addition to stating which variable is nudged and the related time scales, one must provide the fields towards which to nudge (these must be on the same grid as the simulation and must be created separately, e.g. using a re-interpolation of ERA-interim files). These files must be in the directory where LMDZ runs and must be called ''u.nc'', ''v.nc'', ''T.nc'', etc.
== Nudging contribution output ==
One can request that the nudging term be stored in an output file, '''guide_ins.nc''' by setting (in guide.def):
<pre>
guide_sav=y
</pre>
== Notes ==
==== Nudging towards the wind zonal mean ====
Quelques précisions :
* Par défaut, on lit un état de guidage 4x / jour, pareil pour l'interpolation sur les niveaux du modèle. Mais ça peut être modifié (paramètres iguide_read, iguide_int).
* Il y a une option au cas où (guide_2D) pour lire un état de guidage 2D (latitude - Pression) et pas 3D.
* L'option guide_zon veut dire qu'on a un terme de rappel qui est uniforme suivant les longitudes :
** on calcule (u-ug) en chaque point
** puis on fait la moyenne zonale de ce nudging. ug n'est pas forcément symétrique ici, mais comme c'est linéaire...
Attention aux interférences avec guide_reg, le plus simple étant peut-être
de commenter les lignes "if guide_reg..." dans la routine guide_zonave.
Ne pas confondre constante de rappel et fréquence d'appel au guidage
==== Nudging towards surface pressure ====
Il faut probablement restreindre le guidage en pression de surface à l'océan pour éviter d'injecter plein de modes de gravités liés au déséquilibre hydrostatique qui sera nécessairement engendré par le fait que le relief vu par les analyses est différent de celui du modèle.
14/12/2021
[[Category:Nudging]]
[[Category:Guidage]]
7b040a5912204b8b996f3e6034d61ee6acea6cc6
258
252
2022-05-16T13:29:30Z
Lfairhead
1
/* Nudging files */
wikitext
text/x-wiki
== The concept ==
''For indepth theoretical explanations, see this doc in French (dated 2009, some code détails are obsolete): https://lmdz.lmd.jussieu.fr/le-coin-des-developpeurs/notes-techniques/ressources/guidage_LMDZ.pdf''
Nudging is simply adding a forcing term to the GFD equation governing a variable $$V$$ to drive it towards a known value $$V_{analysis}$$ over a given time scale $$\tau$$:
\begin{align}
\frac{\partial V}{\partial t} = \frac{\partial V}{\partial t}_{GCM} + \frac{V_{analysis}-V}{\tau}
\end{align}
Where $$V$$ can be zonal wind u, meridional wind v, relative humidity Q, pressure P or temperature T
Nudging is often used in conjunction with zoomed configurations, where strong nudging towards reanalyses in enforced outside the zoomed region.
== Nudging parameters in LMDZ ==
The master parameter to turn nudging on is ''ok_guide'' (most often all nudging parameters are put in a '''guide.def''' file included in '''run.def''') which must be set to "y" (or equivalently ".true."):
<pre>
ok_guide = y
</pre>
("guide" means "nudge" in French).
Then one must select which fields will be nudged via the ''guide_*'' parameters:
<pre>
guide_u=y
guide_v=y
guide_T=y
guide_P=n
guide_Q=n
</pre>
In the example above, nudging is done on horizontal winds (u,v) and on temperature (T) only.
In addition, the user must provide two time scales $\tau$, for each of the nudged variables; one for the inner zoom area ''tau_max_*'' and another relative to outside the zoomed area ''tau_min_*''. These time scales are stated in unit of days, e.g.
<pre>
tau_min_u= 0.0208333
tau_max_u= 10.
tau_min_v= 0.0208333
tau_max_v= 10.
tau_min_T= 0.0208333
tau_max_T= 10.
</pre>
In this example all 3 variables are nudged with a time scale of 10 days, i.e very loosely, within the zoomed region and a time scale of 30 minutes (30.*60/86400.= 0.0208333), i.e. very strongly, outside the zoomed region.
'''''Caution''''':
==== Ne pas confondre constante de rappel et fréquence d'appel au guidage ====
Quand on guide :
# On lit les champs typiquement toutes les 6 heures (suivant la disponibiité des champs de guidage).
# On interpole linéairement en temps les champs de guidage.
# On rappelle à chaque pas de temps vers ces champs interpolés avec une constante définie dans guide.def avec les tau_min tau_max.
mais "je nudge à chaque pas de temps".
== Nudging files ==
In addition to stating which variable is nudged and the related time scales, one must provide the fields towards which to nudge (these must be on the same grid as the simulation and must be created separately, e.g. using a re-interpolation of ERA-interim files). These files must be in the directory where LMDZ runs and must be called ''u.nc'', ''v.nc'', ''T.nc'', etc.
To create these files see [[Création des fichiers de guidage et adaptation de l'exécution]]
== Nudging contribution output ==
One can request that the nudging term be stored in an output file, '''guide_ins.nc''' by setting (in guide.def):
<pre>
guide_sav=y
</pre>
== Notes ==
==== Nudging towards the wind zonal mean ====
Quelques précisions :
* Par défaut, on lit un état de guidage 4x / jour, pareil pour l'interpolation sur les niveaux du modèle. Mais ça peut être modifié (paramètres iguide_read, iguide_int).
* Il y a une option au cas où (guide_2D) pour lire un état de guidage 2D (latitude - Pression) et pas 3D.
* L'option guide_zon veut dire qu'on a un terme de rappel qui est uniforme suivant les longitudes :
** on calcule (u-ug) en chaque point
** puis on fait la moyenne zonale de ce nudging. ug n'est pas forcément symétrique ici, mais comme c'est linéaire...
Attention aux interférences avec guide_reg, le plus simple étant peut-être
de commenter les lignes "if guide_reg..." dans la routine guide_zonave.
Ne pas confondre constante de rappel et fréquence d'appel au guidage
==== Nudging towards surface pressure ====
Il faut probablement restreindre le guidage en pression de surface à l'océan pour éviter d'injecter plein de modes de gravités liés au déséquilibre hydrostatique qui sera nécessairement engendré par le fait que le relief vu par les analyses est différent de celui du modèle.
14/12/2021
[[Category:Nudging]]
[[Category:Guidage]]
d90ea32fdbfa63f9ee093166e92e4ae72213e292
260
258
2022-05-19T12:03:46Z
Asima
14
wikitext
text/x-wiki
== The concept ==
''For indepth theoretical explanations, see this doc in French (dated 2009, some code détails are obsolete): https://lmdz.lmd.jussieu.fr/le-coin-des-developpeurs/notes-techniques/ressources/guidage_LMDZ.pdf''
Nudging is simply adding a forcing term to the GFD equation governing a variable $$V$$ to drive it towards a known value $$V_{analysis}$$ over a given time scale $$\tau$$:
\begin{align}
\frac{\partial V}{\partial t} = \frac{\partial V}{\partial t}_{GCM} + \frac{V_{analysis}-V}{\tau}
\end{align}
Where $$V$$ can be zonal wind u, meridional wind v, relative humidity Q, pressure P or temperature T
Nudging is often used in conjunction with zoomed configurations, where strong nudging towards reanalyses in enforced outside the zoomed region.
== Nudging parameters in LMDZ ==
The master parameter to turn nudging on is ''ok_guide'' (most often all nudging parameters are put in a '''guide.def''' file included in '''run.def''') which must be set to "y" (or equivalently ".true."):
<pre>
ok_guide = y
</pre>
("guide" means "nudge" in French).
Then one must select which fields will be nudged via the ''guide_*'' parameters:
<pre>
guide_u=y
guide_v=y
guide_T=y
guide_P=n
guide_Q=n
</pre>
In the example above, nudging is done on horizontal winds (u,v) and on temperature (T) only.
In addition, the user must provide two time scales $\tau$, for each of the nudged variables; one for the inner zoom area ''tau_max_*'' and another relative to outside the zoomed area ''tau_min_*''. These time scales are stated in unit of days, e.g.
<pre>
tau_min_u= 0.0208333
tau_max_u= 10.
tau_min_v= 0.0208333
tau_max_v= 10.
tau_min_T= 0.0208333
tau_max_T= 10.
</pre>
In this example all 3 variables are nudged with a time scale of 10 days, i.e very loosely, within the zoomed region and a time scale of 30 minutes (30.*60/86400.= 0.0208333), i.e. very strongly, outside the zoomed region.
'''''Caution''''':
==== Ne pas confondre constante de rappel et fréquence d'appel au guidage ====
Quand on guide :
# On lit les champs typiquement toutes les 6 heures (suivant la disponibiité des champs de guidage).
# On interpole linéairement en temps les champs de guidage.
# On rappelle à chaque pas de temps vers ces champs interpolés avec une constante définie dans guide.def avec les tau_min tau_max.
mais "je nudge à chaque pas de temps".
== Nudging files ==
In addition to stating which variable is nudged and the related time scales, one must provide the fields towards which to nudge (these must be on the same grid as the simulation and must be created separately, e.g. using a re-interpolation of ERA-interim files). These files must be in the directory where LMDZ runs and must be called ''u.nc'', ''v.nc'', ''T.nc'', etc.
To create these files see [[Création des fichiers de guidage et adaptation de l'exécution]]
== Nudging contribution output ==
One can request that the nudging term be stored in an output file, '''guide_ins.nc''' by setting (in guide.def):
<pre>
guide_sav=y
</pre>
== Notes ==
==== Nudging towards the wind zonal mean ====
Quelques précisions :
* Par défaut, on lit un état de guidage 4x / jour, pareil pour l'interpolation sur les niveaux du modèle. Mais ça peut être modifié (paramètres iguide_read, iguide_int).
* Il y a une option au cas où (guide_2D) pour lire un état de guidage 2D (latitude - Pression) et pas 3D.
* L'option guide_zon veut dire qu'on a un terme de rappel qui est uniforme suivant les longitudes :
** on calcule (u-ug) en chaque point
** puis on fait la moyenne zonale de ce nudging. ug n'est pas forcément symétrique ici, mais comme c'est linéaire...
Attention aux interférences avec guide_reg, le plus simple étant peut-être
de commenter les lignes "if guide_reg..." dans la routine guide_zonave.
Ne pas confondre constante de rappel et fréquence d'appel au guidage
==== Nudging towards surface pressure ====
Il faut probablement restreindre le guidage en pression de surface à l'océan pour éviter d'injecter plein de modes de gravités liés au déséquilibre hydrostatique qui sera nécessairement engendré par le fait que le relief vu par les analyses est différent de celui du modèle.
2022/05/16
[[Category:Nudging]]
[[Category:Guidage]]
20f1625092abfb17f93a9a0b74cf0f7398d2f258
263
260
2022-05-19T12:53:59Z
Asima
14
/* The concept */
wikitext
text/x-wiki
== The concept ==
''For indepth explanations, see this doc in French (dated 2009, some code details are obsolete): https://lmdz.lmd.jussieu.fr/le-coin-des-developpeurs/notes-techniques/ressources/guidage_LMDZ.pdf''
Nudging is simply adding a forcing term to the GFD equation governing a variable $$V$$ to drive it towards a known value $$V_{analysis}$$ over a given time scale $$\tau$$:
\begin{align}
\frac{\partial V}{\partial t} = \frac{\partial V}{\partial t}_{GCM} + \frac{V_{analysis}-V}{\tau}
\end{align}
Where $$V$$ can be zonal wind u, meridional wind v, relative humidity Q, pressure P or temperature T
Nudging is often used in conjunction with zoomed configurations, where strong nudging towards reanalyses in enforced outside the zoomed region.
== Nudging parameters in LMDZ ==
The master parameter to turn nudging on is ''ok_guide'' (most often all nudging parameters are put in a '''guide.def''' file included in '''run.def''') which must be set to "y" (or equivalently ".true."):
<pre>
ok_guide = y
</pre>
("guide" means "nudge" in French).
Then one must select which fields will be nudged via the ''guide_*'' parameters:
<pre>
guide_u=y
guide_v=y
guide_T=y
guide_P=n
guide_Q=n
</pre>
In the example above, nudging is done on horizontal winds (u,v) and on temperature (T) only.
In addition, the user must provide two time scales $\tau$, for each of the nudged variables; one for the inner zoom area ''tau_max_*'' and another relative to outside the zoomed area ''tau_min_*''. These time scales are stated in unit of days, e.g.
<pre>
tau_min_u= 0.0208333
tau_max_u= 10.
tau_min_v= 0.0208333
tau_max_v= 10.
tau_min_T= 0.0208333
tau_max_T= 10.
</pre>
In this example all 3 variables are nudged with a time scale of 10 days, i.e very loosely, within the zoomed region and a time scale of 30 minutes (30.*60/86400.= 0.0208333), i.e. very strongly, outside the zoomed region.
'''''Caution''''':
==== Ne pas confondre constante de rappel et fréquence d'appel au guidage ====
Quand on guide :
# On lit les champs typiquement toutes les 6 heures (suivant la disponibiité des champs de guidage).
# On interpole linéairement en temps les champs de guidage.
# On rappelle à chaque pas de temps vers ces champs interpolés avec une constante définie dans guide.def avec les tau_min tau_max.
mais "je nudge à chaque pas de temps".
== Nudging files ==
In addition to stating which variable is nudged and the related time scales, one must provide the fields towards which to nudge (these must be on the same grid as the simulation and must be created separately, e.g. using a re-interpolation of ERA-interim files). These files must be in the directory where LMDZ runs and must be called ''u.nc'', ''v.nc'', ''T.nc'', etc.
To create these files see [[Création des fichiers de guidage et adaptation de l'exécution]]
== Nudging contribution output ==
One can request that the nudging term be stored in an output file, '''guide_ins.nc''' by setting (in guide.def):
<pre>
guide_sav=y
</pre>
== Notes ==
==== Nudging towards the wind zonal mean ====
Quelques précisions :
* Par défaut, on lit un état de guidage 4x / jour, pareil pour l'interpolation sur les niveaux du modèle. Mais ça peut être modifié (paramètres iguide_read, iguide_int).
* Il y a une option au cas où (guide_2D) pour lire un état de guidage 2D (latitude - Pression) et pas 3D.
* L'option guide_zon veut dire qu'on a un terme de rappel qui est uniforme suivant les longitudes :
** on calcule (u-ug) en chaque point
** puis on fait la moyenne zonale de ce nudging. ug n'est pas forcément symétrique ici, mais comme c'est linéaire...
Attention aux interférences avec guide_reg, le plus simple étant peut-être
de commenter les lignes "if guide_reg..." dans la routine guide_zonave.
Ne pas confondre constante de rappel et fréquence d'appel au guidage
==== Nudging towards surface pressure ====
Il faut probablement restreindre le guidage en pression de surface à l'océan pour éviter d'injecter plein de modes de gravités liés au déséquilibre hydrostatique qui sera nécessairement engendré par le fait que le relief vu par les analyses est différent de celui du modèle.
2022/05/16
[[Category:Nudging]]
[[Category:Guidage]]
3db41628a95d189ff82f559cb82bdf79fefbae39
Catégorie:Nudging
14
115
248
2022-05-16T10:02:43Z
Emillour
3
Page créée avec « Various pages about nudging in LMDZ »
wikitext
text/x-wiki
Various pages about nudging in LMDZ
1fe0e57f08469955e1b29ebda6fbe1c55f451ae7
249
248
2022-05-16T10:13:11Z
Emillour
3
wikitext
text/x-wiki
Various pages about nudging in LMDZ
See also the "Guidage" Category for French pages on this topic
52336508cf0fd9565f90249547ec00785f52d796
Calendars
0
88
264
171
2022-07-05T11:10:23Z
Emillour
3
wikitext
text/x-wiki
LMDZ can run using various calendars.
The choice of calendar is set using the ''calend'' parameter (string) in the ''run.def'' file, which may be set to:
* calend=earth_360d (default value if ''calend'' is not set) : years of 360 days (12 months of 30 days each)
* calend=earth_365d : years of 365 days (12 months of varying length; 28 days in February every year)
* calend=earth_366d : real gregorian year of 365 or 366 days with leap years
* calend=gregorian : same as earth_366d
The default behavior of the model is to use the date read in the start.nc file as an initial date for the run (and thus technically continue time marching where it had left off at the previous simulation). But the user may reset the date via the following flag:
* raz_date=1 (default is 0, i.e. no calendar reset, continue from date read in the start file) : reset the calendar
If resetting the calendar then the user should also provide in ''run.def'' :
* anneeref=... : calendar year (default=1998; why not? have to start somewhere...)
* dayref=... : day of the year at which the simulation starts (default=1; i.e. first day of the year)
* starttime=... : hour at which the simulation begins (default=0 ; i.e. midnight at longitude 0)
03/12/2021
[[Category:Inputs]]
7eb8c418eda5ec6cb39f5e86a52fad7f9a77d07e
WhatIs: The raz date parameter
0
116
265
2022-07-05T11:10:35Z
Emillour
3
Page créée avec « The '''raz_date''' parameter is an integer flag (usually in the run.def file) which can be set to 0 (its default value) to let the model use the date read in the start.nc... »
wikitext
text/x-wiki
The '''raz_date''' parameter is an integer flag (usually in the run.def file) which can be set to 0 (its default value) to let the model use the date read in the start.nc file as an initial date for the run (and thus technically continue time marching where it had left off at the previous simulation) or, if set to 1 reset the date manually.
('''raz''' is French shorthand for "Remise à zéro", i.e. reset to zero)
If resetting the calendar with raz_date=1, then the user should also provide the following relevant information in ''run.def'':
* anneeref=... : calendar year (default=1998; why not? have to start somewhere...)
* dayref=... : day of the year at which the simulation starts (default=1; i.e. first day of the year)
* starttime=... : hour at which the simulation begins (default=0 ; i.e. midnight at longitude 0)
05/07/2022
[[Category:Inputs]]
961efcb885bff0850a2a6296d29b2650acbfc849
266
265
2022-07-05T11:12:02Z
Emillour
3
wikitext
text/x-wiki
The '''raz_date''' parameter is an integer flag (usually in the ''run.def'' file) which can be set to 0 (its default value) to let the model use the date read in the start.nc file as an initial date for the run (and thus technically continue time marching where it had left off at the previous simulation) or, if set to 1, reset the date manually.
('''raz''' is French shorthand for "Remise à zéro", i.e. reset to zero)
If resetting the calendar with raz_date=1, then the user should also provide the following relevant information in ''run.def'':
* anneeref=... : calendar year (default=1998; why not? have to start somewhere...)
* dayref=... : day of the year at which the simulation starts (default=1; i.e. first day of the year)
* starttime=... : hour at which the simulation begins (default=0 ; i.e. midnight at longitude 0)
05/07/2022
[[Category:Inputs]]
4920818803938f8699a342bb9ed9dc4cffa6b6b5
HowTo: Hard code the path to a dynamic library in the executable
0
64
267
124
2022-07-05T14:03:42Z
Emillour
3
wikitext
text/x-wiki
If you don't want to use the LD_LIBRARY_PATH environment variable (this is however the recommended way to proceed) to let your executable know where to find needed dynamic libraries (*.so shared object libraries), you can hard code the paths at compile (linking) time, with the <code>-Wl,rpath=</code> option.
== general illustrative example ==
You want your executable to always first look for the needed library in /my/personal/stuff/lib and /some/other/place/lib , then compile with:
<code>-Wl,rpath=/my/personal/stuff/lib:/some/other/place/lib</code>
The drawback of this method is that if the libraries are later moved to different locations, your executable won't know about it and probably abort with an error message of the likes of:
<code>error while loading shared libraries: ...</code>
== LMDZ-specific example ==
Since compilation options are set in the [[WhatIs:_The_target_architecture_("arch")_files|arch.fcm]] file, this is where the option <code>-Wl,rpath=...</code> should be set, on the line starting with <code>%BASE_LD</code>
For example if one wants to hard code to look for personal netcdf libraries that are located in /my/personal/netcdf/lib:
<code>%BASE_LD -Wl,-rpath=/my/personal/netcdf/lib</code>
Not that '''it is generally not recommended''' to use this option as if later on the target library is moved to a different location then the executable won't work anymore... You have been warned.
05/07/2022
[[Category:HowTo]]
f54d86c628d88bf3fb09d47626bc72acfa76493e
Radiative transfer schemes
0
117
268
2022-07-05T15:28:33Z
Emillour
3
Page créée avec « There are different radiative schemes that can be used in LMDZ: * the "legacy" (oldest) radiative scheme: always available. May be selected using the '''iflag_rrtm=0''' o... »
wikitext
text/x-wiki
There are different radiative schemes that can be used in LMDZ:
* the "legacy" (oldest) radiative scheme: always available. May be selected using the '''iflag_rrtm=0''' option in physiq.def. Note that this schemes also requires using 2 bands in the SW (Short Wave, i.e. visible wavelengths), i.e. setting '''NSW=2''' in physiq.def
* RRTM, selected with '''iflag_rrtm=1''' (and requiring that '''NSW=6'''), which will be available if the GCM was compiled with the '''-rad rrtm''' option (see [[WhatIs: The makelmdz fcm script]] )
* ECRAD (implementation is ongoing at the time of writing this) , selected with '''iflag_rrtm=2''', which will be available if the GCM was compiled with the '''-rad ecrad''' option
05/07/2022
bad0ce83932d2a9c49b60503d2b6a0924d4aeb67
269
268
2022-07-05T15:30:08Z
Emillour
3
wikitext
text/x-wiki
There are different radiative schemes that can be used in LMDZ:
* the "legacy" (oldest) radiative scheme: always available. May be selected using the '''iflag_rrtm=0''' option in physiq.def. Note that this schemes also requires using 2 bands in the SW (Short Wave, i.e. visible wavelengths), i.e. setting '''NSW=2''' in physiq.def
* RRTM, selected with '''iflag_rrtm=1''' (and requiring that '''NSW=6'''), which will be available if the GCM was compiled with the '''-rad rrtm''' option (see [[WhatIs: The makelmdz fcm script]]).
* ECRAD (implementation is ongoing at the time of writing this) , selected with '''iflag_rrtm=2''', which will be available if the GCM was compiled with the '''-rad ecrad''' option.
05/07/2022
1637cb3185f68460136b72787cc456033e6328ed
Some pointers about standalone installation of the IOIPSL library
0
118
270
2022-08-05T07:13:55Z
Emillour
3
Page créée avec « This page is mostly for "do-it-yourself" people interested in installing the IOIPSL library. == Prerequisites == IOIPSL is written in Fortran, so you need to have a Fortr... »
wikitext
text/x-wiki
This page is mostly for "do-it-yourself" people interested in installing the IOIPSL library.
== Prerequisites ==
IOIPSL is written in Fortran, so you need to have a Fortran compiler at hand (gfortran in the following examples), as well as an available NetCDF library compiled using that same compiler.
One of the IOIPSL install scripts uses ksh (Korn Shell), which is not always available (Bash, Bourne Again Shell, is now the standard). So you might want to first install it, e.g. on Linux-Ubuntu:
<syntaxhighlight lang="bash">
sudo apt install ksh
</syntaxhighlight>
If that is not an option (e.g. you do not have super-user privileges to install ksh) the you will need to manually modify a file (see section "Know problems and issues worth knowing about" below)
=== Downloading the IOIPSL library sources ===
One can do this using svn (subversion):
<syntaxhighlight lang="bash">
svn checkout --username icmc_users --password icmc2022 https://forge.ipsl.jussieu.fr/igcmg/svn/IOIPSL/trunk IOIPSL
</syntaxhighlight>
where the trailing argument ''IOIPSL'' is customizable to whatever (non existing) subdirectory name one wants to have the library put in.
As of April 2022 the IOIPSL distribution requires username/password authentification (not a big issue as a this does not require any specific registration step as the generic username/password given in the svn command line above can be used).
=== The makeioipsl_fcm compilation script and related FCM architecture files ===
The main script to compile the library is '''makeioipsl_fcm''', located in the distribution's top directory. It uses FCM (Flexible Configuration Management) to know about specific configuration options and set-up and thus requires (just like the GCM) appropriate ''architecture files'' (see [[WhatIs:_The_target_architecture_("arch")_files]]. These files contain information on which compiler to use, what compilation options to use, where relevant libraries are located etc. In practice one must thus create these ASCII text files in the '''arch/''' subdirectory. The naming convention is rather straightforward, when the script '''makeioipsl_fcm''' is run with the option '''-arch somename''', it will look for files '''arch/arch-somename.env''', '''arch/arch-somename.path''' and '''arch/arch-somename.fcm'''.
You will most likely use the IOIPSL with LMDZ6. In that case it is recommended to use the same set of architecture files to compile IOIPSL and the GCM.
== Building the IOIPSL library ==
Building the IOIPSL library then merely requires running the '''makeioipsl_fcm''' with the adequate mandatory '''-arch''' option (note that one can learn about all the possible options by running '''./makeioipsl_fcm -h'''), e.g.:
<syntaxhighlight lang="bash">
./makeioipsl_fcm -arch gfortran
</syntaxhighlight>
=== Checking that the install was successful ===
If the previous step went well the '''IOIPSL/lib''' directory should contain the library:
<pre>
libioipsl.a
</pre>
and the '''IOIPSL/inc''' directory should contain the following module files:
<pre>
calendar.mod flincom.mod histcom.mod restcom.mod
defprec.mod fliocom.mod ioipsl.mod stringop.mod
errioipsl.mod getincom.mod mathelp.mod
</pre>
Congratulations! You can now use the IOIPSL library.
== Know problems and issues worth knowing about ==
* ksh is needed to compile "out of the box"; if ksh is not available then the workaround is to replace line
<syntaxhighlight lang="bash">
#!/bin/ksh
</syntaxhighlight>
to
<syntaxhighlight lang="bash">
#!/bin/bash
</syntaxhighlight>
in the '''IOIPSL/ins_m_prec''' file prior to running the makeioipsl_fcm script.
* Recent versions of the IOIPSL fails to work properly if compiled by gfortran version 4.8.5 (see e.g. https://trac.lmd.jussieu.fr/Planeto/ticket/62 ) but works fine with more recent versions of the compiler (tested with versions 7.2+)
05/08/2022
[[Category:HowTo]]
a44629ef48e4a8ab8ff02f423022ec9029410d7d
271
270
2022-08-05T07:18:16Z
Emillour
3
wikitext
text/x-wiki
This page is mostly for "do-it-yourself" people interested in installing the IOIPSL library.
== Prerequisites ==
IOIPSL is written in Fortran, so you need to have a Fortran compiler at hand (gfortran in the following examples), as well as an available NetCDF library compiled using that same compiler.
One of the IOIPSL install scripts uses ksh (Korn Shell), which is not always available (Bash, Bourne Again Shell, is now the standard). So you might want to first install it, e.g. on Linux-Ubuntu:
<syntaxhighlight lang="bash">
sudo apt install ksh
</syntaxhighlight>
If that is not an option (e.g. you do not have super-user privileges to install ksh) the you will need to manually modify a file (see section "Know problems and issues worth knowing about" below)
=== Downloading the IOIPSL library sources ===
One can do this using svn (subversion):
<syntaxhighlight lang="bash">
svn checkout --username icmc_users --password icmc2022 https://forge.ipsl.jussieu.fr/igcmg/svn/IOIPSL/trunk IOIPSL
</syntaxhighlight>
where the trailing argument ''IOIPSL'' is customizable to whatever (non existing) subdirectory name one wants to have the library put in.
As of April 2022 the IOIPSL distribution requires username/password authentification (not a big issue as a this does not require any specific registration step as the generic username/password given in the svn command line above can be used).
=== The makeioipsl_fcm compilation script and related FCM architecture files ===
The main script to compile the library is '''makeioipsl_fcm''', located in the distribution's top directory. It uses FCM (Flexible Configuration Management) to know about specific configuration options and set-up and thus requires (just like the GCM) appropriate ''architecture files'' (see [[WhatIs:_The_target_architecture_("arch")_files]]. These files contain information on which compiler to use, what compilation options to use, where relevant libraries are located etc. In practice one must thus create these ASCII text files in the '''arch/''' subdirectory. The naming convention is rather straightforward, when the script '''makeioipsl_fcm''' is run with the option '''-arch somename''', it will look for files '''arch/arch-somename.env''', '''arch/arch-somename.path''' and '''arch/arch-somename.fcm'''.
You will most likely use the IOIPSL with LMDZ6. In that case it is recommended to use the same set of architecture files to compile IOIPSL and the GCM.
== Building the IOIPSL library ==
Building the IOIPSL library then merely requires running the '''makeioipsl_fcm''' with the adequate mandatory '''-arch''' option (note that one can learn about all the possible options by running '''./makeioipsl_fcm -h'''), e.g.:
<syntaxhighlight lang="bash">
./makeioipsl_fcm -arch gfortran
</syntaxhighlight>
=== Checking that the install was successful ===
If the previous step went well the '''IOIPSL/lib''' directory should contain the library:
<pre>
libioipsl.a
</pre>
The '''IOIPSL/inc''' directory should contain the following module files:
<pre>
calendar.mod flincom.mod histcom.mod restcom.mod
defprec.mod fliocom.mod ioipsl.mod stringop.mod
errioipsl.mod getincom.mod mathelp.mod
</pre>
And the '''IOIPSL/bin''' directory should contain the ''rebuild'' utility:
<pre>
flio_rbld rebuild
</pre>
Congratulations! You can now use the IOIPSL library.
== Know problems and issues worth knowing about ==
* ksh is needed to compile "out of the box"; if ksh is not available then the workaround is to replace line
<syntaxhighlight lang="bash">
#!/bin/ksh
</syntaxhighlight>
to
<syntaxhighlight lang="bash">
#!/bin/bash
</syntaxhighlight>
in the '''IOIPSL/ins_m_prec''' file prior to running the makeioipsl_fcm script.
* Recent versions of the IOIPSL fails to work properly if compiled by gfortran version 4.8.5 (see e.g. https://trac.lmd.jussieu.fr/Planeto/ticket/62 ) but works fine with more recent versions of the compiler (tested with versions 7.2+)
05/08/2022
[[Category:HowTo]]
14b1f27bc47871be2722c0e63f8e855b617536ff
272
271
2022-08-05T07:20:37Z
Emillour
3
wikitext
text/x-wiki
This page is mostly for "do-it-yourself" people interested in installing the IOIPSL library.
== Prerequisites ==
IOIPSL is written in Fortran, so you need to have a Fortran compiler at hand (gfortran in the following examples), as well as an available NetCDF library compiled using that same compiler.
One of the IOIPSL install scripts uses ksh (Korn Shell), which is not always available (Bash, Bourne Again Shell, is now the standard). So you might want to first install it, e.g. on Linux-Ubuntu:
<syntaxhighlight lang="bash">
sudo apt install ksh
</syntaxhighlight>
If that is not an option (e.g. you do not have super-user privileges to install ksh) the you will need to manually modify a file (see section "Know problems and issues worth knowing about" below)
=== Downloading the IOIPSL library sources ===
One can do this using svn (subversion):
<syntaxhighlight lang="bash">
svn checkout --username icmc_users --password icmc2022 https://forge.ipsl.jussieu.fr/igcmg/svn/IOIPSL/trunk IOIPSL
</syntaxhighlight>
where the trailing argument ''IOIPSL'' is customizable to whatever (non existing) subdirectory name one wants to have the library put in.
As of April 2022 the IOIPSL distribution requires username/password authentification (not a big issue as a this does not require any specific registration step as the generic username/password given in the svn command line above can be used).
=== The makeioipsl_fcm compilation script and related FCM architecture files ===
The main script to compile the library is '''makeioipsl_fcm''', located in the distribution's top directory. It uses FCM (Flexible Configuration Management) to know about specific configuration options and set-up and thus requires (just like the GCM) appropriate ''architecture files'' (check out the [[WhatIs:_The_target_architecture_("arch")_files|page about these)]]. These files contain information on which compiler to use, what compilation options to use, where relevant libraries are located etc. In practice one must thus create these ASCII text files in the '''arch/''' subdirectory. The naming convention is rather straightforward, when the script '''makeioipsl_fcm''' is run with the option '''-arch somename''', it will look for files '''arch/arch-somename.env''', '''arch/arch-somename.path''' and '''arch/arch-somename.fcm'''.
You will most likely use the IOIPSL with LMDZ6. In that case it is recommended to use the same set of architecture files to compile IOIPSL and the GCM.
== Building the IOIPSL library ==
Building the IOIPSL library then merely requires running the '''makeioipsl_fcm''' with the adequate mandatory '''-arch''' option (note that one can learn about all the possible options by running '''./makeioipsl_fcm -h'''), e.g.:
<syntaxhighlight lang="bash">
./makeioipsl_fcm -arch gfortran
</syntaxhighlight>
=== Checking that the install was successful ===
If the previous step went well the '''IOIPSL/lib''' directory should contain the library:
<pre>
libioipsl.a
</pre>
The '''IOIPSL/inc''' directory should contain the following module files:
<pre>
calendar.mod flincom.mod histcom.mod restcom.mod
defprec.mod fliocom.mod ioipsl.mod stringop.mod
errioipsl.mod getincom.mod mathelp.mod
</pre>
And the '''IOIPSL/bin''' directory should contain the ''rebuild'' utility:
<pre>
flio_rbld rebuild
</pre>
Congratulations! You can now use the IOIPSL library.
== Know problems and issues worth knowing about ==
* ksh is needed to compile "out of the box"; if ksh is not available then the workaround is to replace line
<syntaxhighlight lang="bash">
#!/bin/ksh
</syntaxhighlight>
to
<syntaxhighlight lang="bash">
#!/bin/bash
</syntaxhighlight>
in the '''IOIPSL/ins_m_prec''' file prior to running the makeioipsl_fcm script.
* Recent versions of the IOIPSL fails to work properly if compiled by gfortran version 4.8.5 (see e.g. https://trac.lmd.jussieu.fr/Planeto/ticket/62 ) but works fine with more recent versions of the compiler (tested with versions 7.2+)
05/08/2022
[[Category:HowTo]]
6fb42a83c19f154123f0241d3783552023015eef
Available (bench) test cases
0
119
273
2022-08-05T10:03:42Z
Emillour
3
Page créée avec « Test cases (or "bench" cases) are sets of initial conditions and input files that a user can download and use "out of the box", usually to test that his/her installation o... »
wikitext
text/x-wiki
Test cases (or "bench" cases) are sets of initial conditions and input files that a user can download and use "out of the box", usually to test that his/her installation of LMDZ6 is fine.
== Obtaining test (bench) cases ==
If using the [[WhatIs:_The_install_lmdz.sh_script|install_lmdz.sh script]], then a default (assuming script was run with "-bench 1") 32x32x39 case is downloaded (file ''bench_lmdz_32x32x39.tar.gz'') and used. One has to manually change the
<syntaxhighlight lang="bash">
grid_resolution=32x32x39
</syntaxhighlight>
variable in the script (before running it) to pick a different reference case (assuming it is available, see below)
== Downloading test (bench) case ==
To download one of the test cases, simply head for https://web.lmd.jussieu.fr/~lmdz/pub/3DBenchs where you will find .tar.gz files for various GCM resolution and setups. Check out file '''000_Readme''' for more information.
05/08/2022
[[Category:FAQ]]
0e1bdbc53956e62263c854fe585e53313e782826
Some pointers about standalone installation of the XIOS library
0
120
274
2022-08-05T12:12:10Z
Emillour
3
Page créée avec « This page is mostly for "do-it-yourself" people interested in installing the XIOS library, as this step is automated in the install_lmdz.sh script (if run with the ''-xios... »
wikitext
text/x-wiki
This page is mostly for "do-it-yourself" people interested in installing the XIOS library, as this step is automated in the install_lmdz.sh script (if run with the ''-xios'' option). Note also that the download and installation by install_lmdz.sh is done via the use of a dedicated "install_xios.bash" script available here: https://web.lmd.jussieu.fr/~lmdz/pub/import/install_xios.bash , which could also be used in a standalone installation (run ''install_xios.bash -h'' and/or inspect the script).
== Prerequisites ==
There are a couple of prerequisites to installing and using the XIOS library:
# An MPI library must be available
# A NetCDF4-HDF5 library, preferably compiled with MPI enabled, must be available
The rest of this page assume all prerequisites are met. People interested in building an appropriate NetCDF library on their Linux machine might be interested in the following installation script: https://web.lmd.jussieu.fr/~lmdz/pub/import/install_netcdf4_hdf5.bash (which might need some adaptations to work in your specific case).
== Downloading and compiling the XIOS library ==
The XIOS source code is available for download using svn (subversion), e.g.:
<syntaxhighlight lang="bash">
svn co http://forge.ipsl.jussieu.fr/ioserver/svn/XIOS/trunk XIOS
</syntaxhighlight>
* To compile the library, one must first have adequate architecture "arch" files at hand, just like for the GCM (see the [[WhatIs:_The_target_architecture_("arch")_files|page about these)]]). In principle both ''arch.env'' and ''arch.path'' files could be the same as for the GCM; ''arch.fcm'' will of course differ, as XIOS source code is in C++ (along with a Fortran interface). If using a "known" machine (e.g. Occigen, Irene-Rome, Ciclad) then ready-to-use up-to-date arch files for that machine should be present in the ''arch'' directory. If not you will have to create your own (it is advised to use the existing ones as templates!)
* Assuming ''some_machine'' arch files (i.e. files ''arch-some_machine.env'', ''arch-some_machine.path'', ''arch-some_machine.fcm'') are present in the '''arch''' subdirectory, compiling the XIOS is done using the dedicated ''make_xios'' script, e.g.:
<syntaxhighlight lang="bash">
./make_xios --prod --arch some_machine --job 8
</syntaxhighlight>
If the compilation steps went well then the '''lib''' directory should contain file ''libxios.a'' and the '''bin''' directory should contain
<pre>
fcm_env.ksh generic_testcase.exe xios_server.exe
</pre>
== Compiling LMDZ6 with the XIOS library ==
To compile with XIOS enabled, one must specify the option
<syntaxhighlight lang="bash">
-io xios
</syntaxhighlight>
to the [[WhatIs: The makelmdz fcm script|makelmdz_fcm]] script.
05/08/2022
[[Category:HowTo]]
[[Category:Xios]]
e4a73ef8355fbc5b2a864b3fa418b4018202491d
Some pointers about standalone installation of LMDZ
0
121
275
2022-08-05T13:30:15Z
Emillour
3
Page créée avec « This page is mostly for "do-it-yourself" people interested in installing LMDZ6 == Prerequisites == In the most minimal case, where one would only run the serial version o... »
wikitext
text/x-wiki
This page is mostly for "do-it-yourself" people interested in installing LMDZ6
== Prerequisites ==
In the most minimal case, where one would only run the serial version of the GCM, then the prerequisites are:
# Have a Fortran compiler at hand
# Have a NetCDF library (compiled with the same compiler) available
# Have the IOIPSL library available (see [[Some pointers about standalone installation of the IOIPSL library|this page]] for more about installing IOIPSL)
In a more realistic case, you'll probably want to run the parallel version of the GCM, most likely with XIOS; The prerequisites are then:
# Have a Fortran-enabled MPI library at hand
# A NetCDF4-HDF5 library, preferably compiled with MPI enabled
# Have the IOIPSL library available
# Have the XIOS library available (see [[Some pointers about standalone installation of the XIOS library|this page]] for more about installing XIOS)
== Downloading LMDZ6 source code ==
This is easily done using svn (subversion). To download the latest version from the trunk as an "LMDZ6" directory:
<syntaxhighlight lang=bash>
svn checkout http://svn.lmd.jussieu.fr/LMDZ/LMDZ6/trunk LMDZ6
</syntaxhighlight>
Note that the recommended way to proceed is to have all models and libraries at the same level in a master directory, so a working example would be where the master directory contents would be:
<pre>
IOIPSL LMDZ6 XIOS
</pre>
To compile LMDZ one would then proceed to the LMDZ6 subdirectory, make some adequate [[WhatIs: The target architecture ("arch") files|architecture files]] (if needed) and use the [[WhatIs: The makelmdz fcm script|makelmdz_fcm.sh]] script
05/08/2022
[[Category:HowTo]]
9978129aebf38c9238200a770fe983288f0fc695
306
275
2023-01-04T16:29:07Z
Emillour
3
wikitext
text/x-wiki
This page is mostly for "do-it-yourself" people interested in installing LMDZ6
== Prerequisites ==
In the most minimal case, where one would only run the serial version of the GCM, then the prerequisites are:
# Have a Fortran compiler at hand
# Have a NetCDF library (compiled with the same compiler) available (see [[The netCDF library|this page]] for more about installing NetCDF)
# Have the IOIPSL library available (see [[Some pointers about standalone installation of the IOIPSL library|this page]] for more about installing IOIPSL)
In a more realistic case, you'll probably want to run the parallel version of the GCM, most likely with XIOS; The prerequisites are then:
# Have a Fortran-enabled MPI library at hand (see [[Building an MPI library|this page]] for more about installing MPI)
# A NetCDF4-HDF5 library, preferably compiled with MPI enabled
# Have the IOIPSL library available
# Have the XIOS library available (see [[Some pointers about standalone installation of the XIOS library|this page]] for more about installing XIOS)
== Downloading LMDZ6 source code ==
This is easily done using svn (subversion). To download the latest version from the trunk as an "LMDZ6" directory:
<syntaxhighlight lang=bash>
svn checkout http://svn.lmd.jussieu.fr/LMDZ/LMDZ6/trunk LMDZ6
</syntaxhighlight>
Note that the recommended way to proceed is to have all models and libraries at the same level in a master directory, so a working example would be where the master directory contents would be:
<pre>
IOIPSL LMDZ6 XIOS
</pre>
To compile LMDZ one would then proceed to the LMDZ6 subdirectory, make some adequate [[WhatIs: The target architecture ("arch") files|architecture files]] (if needed) and use the [[WhatIs: The makelmdz fcm script|makelmdz_fcm.sh]] script
04/01/2023
[[Category:HowTo]]
2da1511cba1303b9c4032d36623b4c2e7b29b374
LMDZ zoom parameters
0
77
276
175
2022-10-10T09:54:03Z
Emillour
3
wikitext
text/x-wiki
The "Z" in LMDZ stands for "Zoom".
This is because it is possible to define, instead of a regular longitude-latitude grid, a grid with varying mesh sizes along longitudes and latitudes.
== Zoom parameters ==
In practice one defines a "zoomed region" of interest where the resolution will be highest (and homogeneous), whereas outside this region the resolution will be low (and also homogeneous, apart from a transition region between the two). This is achieved by specifying the following parameters (usually in gcm.def):
* The zoom center coordinates (in degrees), ''clon'' and ''clat''
* The zoom factor along longitude(x)/latitude(y) directions, ''grossismx'' and ''grossismy''. These ratio represent the ratio between meshes in the zoomed region versus meshes far outside of it.
* The fraction of the zoomed region (i.e. relative to the whole planet which is 360° in longitude and 180° in latitude) along longitude (x) and latitude (y), ''dzoomx'' and ''dzoomy''. In practice the extension in longitude and latitude of the zoomed region will thus be of dzoomx*360° in longitude and dzoomy*180° in latitude
* The steepness of the mesh transition between the inner zoom and outer meshes, ''taux'' and ''tauy''. Typically one should avoid a too sharp transition; tau ~3 is a typically maximum value if running without nudging; with strong nudging harsher transitions, e.g. tau~8 or even 10 can also work.
* It is advised to target, by adjusting number of points along longitude and latitude, to have something close to a "square" mesh (i.e. same extension, in degrees, along longitudes and latitudes) in the inner zoomed area.
== Choosing an adequate time step for a zoomed simulation ==
The rule of thumb, starting from a "day_step" value that works for a given regular (non-zoomed) grid:
day_step(zoom) ~ day_step(regular)*max(grossismx,grossismy)
It is also advised to check what others users have successfully used, see e.g. [[LMDZ_zoom_collection]]
24/11/2021
[[Catégorie:Zoom]]
a12bfd0c4aff30410240c7adc928e7d4de92e7e4
MediaWiki:Sidebar
8
107
277
218
2022-11-16T15:47:21Z
Lfairhead
1
wikitext
text/x-wiki
* navigation
** mainpage|mainpage-description
*** informatique
*** administratif
*** utilisateur
*** FAQs
** recentchanges-url|recentchanges
** randompage-url|randompage
** helppage|help-mediawiki
* SEARCH
* TOOLBOX
* LANGUAGES
d6f17a677e11fcf6e65f150f86a5644fdf916188
278
277
2022-11-16T15:49:08Z
Lfairhead
1
wikitext
text/x-wiki
* navigation
** mainpage|mainpage-description
# informatique
** recentchanges-url|recentchanges
** randompage-url|randompage
** helppage|help-mediawiki
* SEARCH
* TOOLBOX
* LANGUAGES
ea8ebcaa27c963aff89b9732db970c8cb259e8df
279
278
2022-11-16T15:52:26Z
Lfairhead
1
wikitext
text/x-wiki
* navigation
** mainpage|mainpage-description
*** informatique
** recentchanges-url|recentchanges
** randompage-url|randompage
** helppage|help-mediawiki
* SEARCH
* TOOLBOX
* LANGUAGES
68c98088091fbe0cce8ecaace11b0f7886ba9f53
280
279
2022-11-16T15:54:32Z
Lfairhead
1
wikitext
text/x-wiki
* navigation
** mainpage|mainpage-description
** recentchanges-url|recentchanges
** randompage-url|randompage
** helppage|help-mediawiki
* SEARCH
* TOOLBOX
* LANGUAGES
df7c604d036435a413d00baa4fd183f6a56b1543
Argument omega de la procédure physiq
0
122
281
2022-11-18T15:58:43Z
Lguez
4
Page créée avec « L'argument omega de la procédure physiq n'est pas la dérivée lagrangienne de la pression. C'est : (\partial_\eta p) \frac{\uD \eta}{\uD t} où \eta_est la coordonnée... »
wikitext
text/x-wiki
L'argument omega de la procédure physiq n'est pas la dérivée lagrangienne de la pression. C'est :
(\partial_\eta p) \frac{\uD \eta}{\uD t}
où \eta_est la coordonnée verticale hybride sigma-pression.
C'est calculé en utilisant l'équation de continuité intégrée à partir du
sommet, soit
convm(l) - BP(l).convm(0)
avec convm la convergence du flux de masse horizontal intégrée à partir du
sommet.
On ne peut pas recalculer omega dans la physique pour l'instant, car on ne
passe pas la tendance de pression de surface (ou convm(0)). C'est une
variable output de la physique, d'ailleurs systématiquement égale à 0...
12010ba62dbfde4b68470ba3c62e90e23abc3ec7
283
281
2022-11-18T16:01:19Z
Lguez
4
wikitext
text/x-wiki
L'argument omega de la procédure physiq n'est pas la dérivée lagrangienne de la pression. C'est :
[[Fichier:omega.png]]
où \eta est la coordonnée verticale hybride sigma-pression.
C'est calculé en utilisant l'équation de continuité intégrée à partir du
sommet, soit
convm(l) - BP(l).convm(0)
avec convm la convergence du flux de masse horizontal intégrée à partir du
sommet.
On ne peut pas recalculer omega dans la physique pour l'instant, car on ne
passe pas la tendance de pression de surface (ou convm(0)). C'est une
variable output de la physique, d'ailleurs systématiquement égale à 0...
b310604ed93a2be6427391557db592302372af02
284
283
2022-11-18T16:03:07Z
Lguez
4
wikitext
text/x-wiki
L'argument omega de la procédure physiq n'est pas la dérivée lagrangienne de la pression. C'est :
[[Fichier:omega.png]]
où \eta est la coordonnée verticale hybride sigma-pression.
C'est calculé en utilisant l'équation de continuité intégrée à partir du
sommet, soit
convm(l) - BP(l).convm(0)
avec convm la convergence du flux de masse horizontal intégrée à partir du
sommet.
On ne peut pas recalculer omega dans la physique pour l'instant, car on ne
passe pas la tendance de pression de surface (ou convm(0)). C'est une
variable output de la physique, d'ailleurs systématiquement égale à 0...
NB : omega est dans les sorties sous le nom wap, avec l'attribut long_name = "lagrangian tendency of air pressure", ce qui n'est donc pas correct.
7ab86bfc25a857bc66350faa25dd63089497954f
285
284
2022-11-18T16:08:08Z
Lguez
4
wikitext
text/x-wiki
L'argument omega de la procédure physiq n'est pas la dérivée lagrangienne de la pression. C'est :
[[Fichier:omega.png]]
où \eta est la coordonnée verticale hybride sigma-pression.
C'est calculé dans la dynamique en utilisant l'équation de continuité intégrée à partir du
sommet, soit :
convm(l) - BP(l).convm(0)
avec convm la convergence du flux de masse horizontal intégrée à partir du
sommet. omega donne le flux de masse à travers les surfaces
de coordonnée verticale \eta constante, et est donc utilisé dans la
dynamique pour l'advection verticale.
Sur les océans, c'est (à peu près) la même chose que la vitesse verticale
en coordonnées pression DP/Dt, mais près de la topographie c'est
assez différent et le signe peut même être opposé
On ne peut pas recalculer omega dans la physique pour l'instant, car on ne
passe pas la tendance de pression de surface (ou convm(0)). C'est une
variable output de la physique, d'ailleurs systématiquement égale à 0...
NB : omega est dans les sorties sous le nom wap, avec l'attribut long_name = "lagrangian tendency of air pressure", ce qui n'est donc pas correct.
a23a9caf1f562ba02987e7b8be37f9247a617120
Fichier:Omega.png
6
123
282
2022-11-18T15:59:43Z
Lguez
4
wikitext
text/x-wiki
da39a3ee5e6b4b0d3255bfef95601890afd80709
HowTo: debug the quality control
0
73
286
144
2022-12-12T17:40:45Z
Lguez
4
wikitext
text/x-wiki
As explained on https://lmdz.lmd.jussieu.fr/le-coin-des-developpeurs/controle-qualite, a number of quality control checks of the code are run every night to ensure that nothing was broken by the most recent commits to the svn depository (note that only the trunk version of the code is tested by this procedure).
This note explains what to do if those regular tests reveal that the code is broken.
The checks are launched by the [https://www.lmd.jussieu.fr/~lmdz/Distrib/creation_modipsl.sh following script] which prepares the distribution version of the code and then lauches the [https://www.lmd.jussieu.fr/~lmdz/Distrib/check_version.sh script] that actually launches the quality checks. The results of the tests are synthesized in one line and recorded in the following file https://www.lmd.jussieu.fr/~lmdz/pub/LISMOI.trunk. Each line of this file (besides the comments) gives the version of the code being tested, its corresponding svn revision number and the results of the different checks (as explained in the file and the webpage given above [https://lmdz.lmd.jussieu.fr/le-coin-des-developpeurs/controle-qualite]
=== How to debug a failed quality check ===
Once a failed quality check is established, one should look in the LISMOI.trunk file [https://www.lmd.jussieu.fr/~lmdz/pub/LISMOI.trunk] to find out which version of the code caused a problem (for example 20211105.trunk). One can then find the output of the quality control check in the
lmdz-cq:/tmp/lmdz/LMDZ[version_number]
directory with the actual output file of the check_version.sh script in
lmdz-cq:~lmdz/WWW/Distrib/WORK/check.out.[version_number]
('''''lmdz-cq:/tmp/lmdz/LMDZ20211105.trunk''''' and '''''lmdz-cq:~lmdz/WWW/Distrib/WORK/check.out.20211105.trunk''''' respectively in our example). This output file is also [https://lmdz.lmd.jussieu.fr/Distrib/WORK accessible on internet].
One can then go through the check_version.sh script [https://www.lmd.jussieu.fr/~lmdz/Distrib/check_version.sh] comparing with the different output to find out what went wrong. Tests of correction can actually be done in the
lmdz-cq:/tmp/lmdz/LMDZ[version_number]
directory.
[[Category:HowTo]]
[[Category:ExpertDev]]
193bf71684670894ca2bd1fa740d2f1db2b9b012
287
286
2022-12-12T17:42:58Z
Lguez
4
wikitext
text/x-wiki
As explained on https://lmdz.lmd.jussieu.fr/le-coin-des-developpeurs/controle-qualite, a number of quality control checks of the code are run every night to ensure that nothing was broken by the most recent commits to the svn depository (note that only the trunk version of the code is tested by this procedure).
This note explains what to do if those regular tests reveal that the code is broken.
The checks are launched by the [https://www.lmd.jussieu.fr/~lmdz/Distrib/creation_modipsl.sh following script] which prepares the distribution version of the code and then lauches the [https://www.lmd.jussieu.fr/~lmdz/Distrib/check_version.sh script] that actually launches the quality checks. The results of the tests are synthesized in one line and recorded in the following file https://www.lmd.jussieu.fr/~lmdz/pub/LISMOI.trunk. Each line of this file (besides the comments) gives the version of the code being tested, its corresponding svn revision number and the results of the different checks (as explained in the file and the webpage given above [https://lmdz.lmd.jussieu.fr/le-coin-des-developpeurs/controle-qualite]
=== How to debug a failed quality check ===
Once a failed quality check is established, one should look in the [https://www.lmd.jussieu.fr/~lmdz/pub/LISMOI.trunk LISMOI.trunk file] to find out which version of the code caused a problem (for example 20211105.trunk). One can then find the output of the quality control check in the
lmdz-cq:/tmp/lmdz/LMDZ[version_number]
directory with the actual output file of the check_version.sh script in
lmdz-cq:~lmdz/WWW/Distrib/WORK/check.out.[version_number]
('''''lmdz-cq:/tmp/lmdz/LMDZ20211105.trunk''''' and '''''lmdz-cq:~lmdz/WWW/Distrib/WORK/check.out.20211105.trunk''''' respectively in our example). This output file is also [https://lmdz.lmd.jussieu.fr/Distrib/WORK accessible on internet].
One can then go through the [https://www.lmd.jussieu.fr/~lmdz/Distrib/check_version.sh check_version.sh script] comparing with the different output to find out what went wrong. Tests of correction can actually be done in the
lmdz-cq:/tmp/lmdz/LMDZ[version_number]
directory.
[[Category:HowTo]]
[[Category:ExpertDev]]
023676ea3809f1779e7d128e085002c508b19127
288
287
2022-12-16T11:13:44Z
Lguez
4
wikitext
text/x-wiki
As explained on the page [https://lmdz.lmd.jussieu.fr/le-coin-des-developpeurs/controle-qualite Contrôle qualité], a number of quality control checks of the code are run every night to ensure that nothing was broken by the most recent commits to the svn depository (note that only the trunk version of the code is tested by this procedure).
This note explains what to do if those regular tests reveal that the code is broken.
The checks are launched by the script [https://www.lmd.jussieu.fr/~lmdz/Distrib/creation_modipsl.sh creation_modipsl.sh] which prepares the distribution version of the code and then lauches [https://www.lmd.jussieu.fr/~lmdz/Distrib/check_version.sh check_version.sh], which actually launches the quality checks. The results of the tests are synthesized in one line and recorded in the file [https://www.lmd.jussieu.fr/~lmdz/pub/LISMOI.trunk LISMOI.trunk]. Each line of this file (besides the comments) gives the version of the code being tested, its corresponding svn revision number and the results of the different checks (as explained in the file and the webpage given above [https://lmdz.lmd.jussieu.fr/le-coin-des-developpeurs/controle-qualite]
=== How to debug a failed quality check ===
Once a failed quality check is established, one should look in the file [https://www.lmd.jussieu.fr/~lmdz/pub/LISMOI.trunk LISMOI.trunk] to find out which version of the code caused a problem (for example 20211105.trunk). One can then find the output of the quality control check in the
lmdz-cq:/tmp/lmdz/LMDZ[version_number]
directory with the actual output file of the check_version.sh script in
lmdz-cq:~lmdz/WWW/Distrib/WORK/check.out.[version_number]
('''''lmdz-cq:/tmp/lmdz/LMDZ20211105.trunk''''' and '''''lmdz-cq:~lmdz/WWW/Distrib/WORK/check.out.20211105.trunk''''' respectively in our example). This output file is also [https://lmdz.lmd.jussieu.fr/Distrib/WORK accessible on internet].
One can then go through the script [https://www.lmd.jussieu.fr/~lmdz/Distrib/check_version.sh check_version.sh] comparing with the different output to find out what went wrong. Tests of correction can actually be done in the
lmdz-cq:/tmp/lmdz/LMDZ[version_number]
directory.
[[Category:HowTo]]
[[Category:ExpertDev]]
586e5ac2d18ec70b066cba008a2f8721d905dffc
289
288
2022-12-16T11:15:16Z
Lguez
4
wikitext
text/x-wiki
As explained on the page [https://lmdz.lmd.jussieu.fr/le-coin-des-developpeurs/controle-qualite Contrôle qualité], a number of quality control checks of the code are run every night to ensure that nothing was broken by the most recent commits to the svn depository (note that only the trunk version of the code is tested by this procedure).
This note explains what to do if those regular tests reveal that the code is broken.
The checks are launched by the script [https://www.lmd.jussieu.fr/~lmdz/Distrib/creation_modipsl.sh creation_modipsl.sh] which prepares the distribution version of the code and then lauches [https://www.lmd.jussieu.fr/~lmdz/Distrib/check_version.sh check_version.sh], which actually launches the quality checks. The results of the tests are synthesized in one line and recorded in the file [https://www.lmd.jussieu.fr/~lmdz/pub/LISMOI.trunk LISMOI.trunk]. Each line of this file (besides the comments) gives the version of the code being tested, its corresponding svn revision number and the results of the different checks (as explained in the file and the page [https://lmdz.lmd.jussieu.fr/le-coin-des-developpeurs/controle-qualite Contrôle qualité]).
=== How to debug a failed quality check ===
Once a failed quality check is established, one should look in the file [https://www.lmd.jussieu.fr/~lmdz/pub/LISMOI.trunk LISMOI.trunk] to find out which version of the code caused a problem (for example 20211105.trunk). One can then find the output of the quality control check in the
lmdz-cq:/tmp/lmdz/LMDZ[version_number]
directory with the actual output file of the check_version.sh script in
lmdz-cq:~lmdz/WWW/Distrib/WORK/check.out.[version_number]
('''''lmdz-cq:/tmp/lmdz/LMDZ20211105.trunk''''' and '''''lmdz-cq:~lmdz/WWW/Distrib/WORK/check.out.20211105.trunk''''' respectively in our example). This output file is also [https://lmdz.lmd.jussieu.fr/Distrib/WORK accessible on internet].
One can then go through the script [https://www.lmd.jussieu.fr/~lmdz/Distrib/check_version.sh check_version.sh] comparing with the different output to find out what went wrong. Tests of correction can actually be done in the
lmdz-cq:/tmp/lmdz/LMDZ[version_number]
directory.
[[Category:HowTo]]
[[Category:ExpertDev]]
f825333be1b842daf15c6fa654f6e167ce7403fb
290
289
2022-12-16T11:17:10Z
Lguez
4
wikitext
text/x-wiki
As explained on the page [https://lmdz.lmd.jussieu.fr/le-coin-des-developpeurs/controle-qualite Contrôle qualité], a number of quality control checks of the code are run every night to ensure that nothing was broken by the most recent commits to the svn depository (note that only the trunk version of the code is tested by this procedure).
This note explains what to do if those regular tests reveal that the code is broken.
The checks are launched by the script [https://www.lmd.jussieu.fr/~lmdz/Distrib/creation_modipsl.sh creation_modipsl.sh] which prepares the distribution version of the code and then lauches [https://www.lmd.jussieu.fr/~lmdz/Distrib/check_version.sh check_version.sh], which actually launches the quality checks. The results of the tests are synthesized in one line and recorded in the file [https://www.lmd.jussieu.fr/~lmdz/pub/LISMOI.trunk LISMOI.trunk]. Each line of this file (besides the comments) gives the version of the code being tested, its corresponding svn revision number and the results of the different checks (as explained in the file and the page [https://lmdz.lmd.jussieu.fr/le-coin-des-developpeurs/controle-qualite Contrôle qualité]).
=== How to debug a failed quality check ===
Once a failed quality check is established, one should look in the file [https://www.lmd.jussieu.fr/~lmdz/pub/LISMOI.trunk LISMOI.trunk] to find out which version of the code caused a problem (for example 20211105.trunk). One can then find the output of the quality control check in the directory:
lmdz-cq:/tmp/lmdz/LMDZ[version_number]
with the actual output file of the check_version.sh script in
lmdz-cq:~lmdz/WWW/Distrib/WORK/check.out.[version_number]
('''''lmdz-cq:/tmp/lmdz/LMDZ20211105.trunk''''' and '''''lmdz-cq:~lmdz/WWW/Distrib/WORK/check.out.20211105.trunk''''' respectively in our example). This output file is also [https://lmdz.lmd.jussieu.fr/Distrib/WORK accessible on internet].
One can then go through the script [https://www.lmd.jussieu.fr/~lmdz/Distrib/check_version.sh check_version.sh] comparing with the different output to find out what went wrong. Tests of correction can actually be done in the
lmdz-cq:/tmp/lmdz/LMDZ[version_number]
directory.
[[Category:HowTo]]
[[Category:ExpertDev]]
2943643fc60377e64449f3eab3b17aa719099e9a
WhatIs: The traceur.def input file
0
31
291
58
2023-01-03T07:24:58Z
Emillour
3
wikitext
text/x-wiki
== The traceur.def input file tells LMDZ about the tracers to advect ==
The traceur.def is a plain text file that is read at run time by LMDZ. Its format is quite strict:
* The first line contains the number n of tracers to advect in the dynamics
* The n following lines contain the following set ( two integer numbers and a string): hadv , vadv, tname . hadv and vadv are traceur advection scheme numbers and tname is the tracer name
'''Tracer advection schemes'''
A few are coded, but not for the parallel case, so we only present the important (i.e. operational) ones here:
* 0 : no advection. This tracer will not be advected by the dynamics
* 10: advection using a Van Leer scheme. This is the standard advection scheme to use for tracers.
* 14: a specific advection scheme for the water vapor tracer (i.e. "H2Ov")
'''Illustrative example'''
In practice a "traceur.def" file will look like this:
4
14 14 H2Ov
10 10 H2Ol
10 10 H2Oi
00 00 Aga
In this example, there are 4 tracers, the first one is "H2Ov" (water vapor) and advected using scheme number 14, the second and third are "H2Ol" (liquid water) and "H2Oi" (water ice), and the last is called "Aga" and completely passive (i.e. untouched by the dynamics).
== The tracer.def input file ==
Note that the use of a '''traceur.def''' file as described above is now depreciated (but should still work fine as the code is retro-compatible) and that it is recommended to now use a '''tracer.def''' as described here.
03/01/2023
[[Category:WhatIs]]
c104f5b48c45d4bbf70e411e1ccea762769793e6
293
291
2023-01-03T08:08:04Z
Emillour
3
wikitext
text/x-wiki
== The traceur.def input file tells LMDZ about the tracers to advect ==
The traceur.def is a plain text file that is read at run time by LMDZ. Its format is quite strict:
* The first line contains the number n of tracers to advect in the dynamics
* The n following lines contain the following set ( two integer numbers and a string): hadv , vadv, tname . hadv and vadv are traceur advection scheme numbers and tname is the tracer name
'''Tracer advection schemes'''
A few are coded, but not for the parallel case, so we only present the important (i.e. operational) ones here:
* 0 : no advection. This tracer will not be advected by the dynamics
* 10: advection using a Van Leer scheme. This is the standard advection scheme to use for tracers.
* 14: a specific advection scheme for the water vapor tracer (i.e. "H2Ov")
'''Illustrative example'''
In practice a "traceur.def" file will look like this:
4
14 14 H2Ov
10 10 H2Ol
10 10 H2Oi
00 00 Aga
In this example, there are 4 tracers, the first one is "H2Ov" (water vapor) and advected using scheme number 14, the second and third are "H2Ol" (liquid water) and "H2Oi" (water ice), and the last is called "Aga" and completely passive (i.e. untouched by the dynamics).
== The tracer.def input file ==
Note that the use of a '''traceur.def''' file as described above is now depreciated (but should still work fine as the code is retro-compatible) and that it is recommended to now use a '''tracer.def''' as described [[WhatIs: The tracer.def input file|here]].
03/01/2023
[[Category:WhatIs]]
eb5afe57d0ebce3b6fd757940871831d8dbadef8
WhatIs: The tracer.def input file
0
124
292
2023-01-03T08:07:52Z
Emillour
3
Page créée avec « == The tracer.def input file == This file contains information on the tracers that will be advected in the dynamics. It should be used instead of the now depreciated Wha... »
wikitext
text/x-wiki
== The tracer.def input file ==
This file contains information on the tracers that will be advected in the dynamics. It should be used instead of the now depreciated [[WhatIs: The traceur.def input file|traceur.def]] input file.
== Simple example of a ''tracer.def'' file ==
<pre>
&version=1.0
&lmdz
default type=tracer phases=g hadv=10 vadv=10 parent=air
H2O hadv=14 vadv=14
H2O phases=ls
Aga
</pre>
* The mandatory first line ''&version'' is there to handle (potential) versioning of these file and their format
* The mandatory second line ''&lmdz'' is there to specify the scope of the following lines, i.e. that all that follow is relevant for the LMDZ lon-lat dynamical core.
* The mandatory third line starting with ''default'' specifies the default attributes for all the tracers. In this example that they are of type ''tracer'' (as opposed to type ''tag'' for tagging), that there phase is ''g'' (gas), that they are advected using advection schemes hadv and vadv ''10'' (Van Leer advection scheme) and that their parent (i.e. carrier fluid) is ''air''.
* Then one should specify on successive lines the tracer names and optionally their properties such as phases (g: gas, l: liquid, s:solid). Note that one may condense information about phases using a mix of letters g/l/s rather than specifying the information for each on a separate line. In practice the lines
<pre>
H2O hadv=14 vadv=14
H2O phases=ls
</pre>
From the example above which specifies there are 3 H2O phases (gas, liquid and solid), where the gas phase is advected with the hadv and vadv ''14'' dedicated scheme could also be written more explicitly as:
<pre>
H2O phases=g hadv=14 vadv=14
H2O phases=l
H2O phases=s
</pre>
== A more advanced example of a ''tracer.def file'' ==
03/01/2023
[[Category:WhatIs]]
36fd9cf16f766ba49bcbc0bed763b320986d121b
294
292
2023-01-03T08:14:22Z
Emillour
3
wikitext
text/x-wiki
== The tracer.def input file ==
This file contains information on the tracers that will be advected in the dynamics. It should be used instead of the now depreciated [[WhatIs: The traceur.def input file|traceur.def]] input file.
== Simple example of a ''tracer.def'' file ==
<pre>
&version=1.0
&lmdz
default type=tracer phases=g hadv=10 vadv=10 parent=air
H2O hadv=14 vadv=14
H2O phases=ls
Aga
</pre>
* The mandatory first line ''&version'' is there to handle (potential) versioning of these file and their format
* The mandatory second line ''&lmdz'' is there to specify the scope of the following lines, i.e. that all that follow is relevant for the LMDZ lon-lat dynamical core.
* The mandatory third line starting with ''default'' specifies the default attributes for all the tracers. In this example that they are of type ''tracer'' (as opposed to type ''tag'' for tagging), that there phase is ''g'' (gas), that they are advected using advection schemes hadv and vadv ''10'' (Van Leer advection scheme) and that their parent (i.e. carrier fluid) is ''air''.
* Then one should specify on successive lines the tracer names and optionally their properties such as phases (g: gas, l: liquid, s:solid). Note that one may condense information about phases using a mix of letters g/l/s rather than specifying the information for each on a separate line. In practice the lines
<pre>
H2O hadv=14 vadv=14
H2O phases=ls
</pre>
From the example above which specifies there are 3 H2O phases (gas, liquid and solid), where the gas phase is advected with the hadv and vadv ''14'' dedicated scheme could also be written more explicitly as:
<pre>
H2O phases=g hadv=14 vadv=14
H2O phases=l
H2O phases=s
</pre>
== A more advanced example of a ''tracer.def file'' ==
The following example includes water isotopes (identified by the fact that their ''parent'' is not ''air'' but the tracer ''H2O'')
with two tags (''con'' and ''oce'')
<pre>
&version=1.0
&lmdz
default hadv=10 vadv=10 phases=g parent=air type=tracer
H2O hadv=14 vadv=14
H2O phases=ls
RN,PB
H2[18]O,H[2]HO,H2[16]O phases=gls parent=H2O
con,oce phases=gls parent=H2[18]O,H[2]HO,H2[16]O type=tag
</pre>
03/01/2023
[[Category:WhatIs]]
1013631164ec3221c8d6c76f75d2484629363dd9
295
294
2023-01-03T08:17:55Z
Emillour
3
wikitext
text/x-wiki
== The tracer.def input file ==
This file contains information on the tracers that will be advected in the dynamics. It should be used instead of the now depreciated [[WhatIs: The traceur.def input file|traceur.def]] input file.
== Simple example of a ''tracer.def'' file ==
<pre>
&version=1.0
&lmdz
default type=tracer phases=g hadv=10 vadv=10 parent=air
H2O hadv=14 vadv=14
H2O phases=ls
Aga
</pre>
* The mandatory first line ''&version'' is there to handle (potential) versioning of these file and their format
* The mandatory second line ''&lmdz'' is there to specify the scope of the following lines, i.e. that all that follow is relevant for the LMDZ lon-lat dynamical core.
* The mandatory third line starting with ''default'' specifies the default attributes for all the tracers. In this example that they are of type ''tracer'' (as opposed to type ''tag'' for tagging), that there phase is ''g'' (gas), that they are advected using advection schemes hadv and vadv ''10'' (Van Leer advection scheme) and that their parent (i.e. carrier fluid) is ''air''.
* Then one should specify on successive lines the tracer names and optionally their properties such as phases (g: gas, l: liquid, s:solid). Note that one may condense information about phases using a mix of letters g/l/s rather than specifying the information for each on a separate line. In practice the lines
<pre>
H2O hadv=14 vadv=14
H2O phases=ls
</pre>
From the example above which specifies there are 3 H2O phases (gas, liquid and solid), where the gas phase is advected with the hadv and vadv ''14'' dedicated scheme could also be written more explicitly as:
<pre>
H2O phases=g hadv=14 vadv=14
H2O phases=l
H2O phases=s
</pre>
== A more advanced example of a ''tracer.def file'' ==
The following example includes water isotopes (identified by the fact that their ''parent'' is not ''air'' but the tracer ''H2O'')
with two tags (''con'' and ''oce'')
<pre>
&version=1.0
&lmdz
default hadv=10 vadv=10 phases=g parent=air type=tracer
H2O hadv=14 vadv=14
H2O phases=ls
RN,PB
H2[18]O,H[2]HO,H2[16]O phases=gls parent=H2O
con,oce phases=gls parent=H2[18]O,H[2]HO,H2[16]O type=tag
</pre>
As LMDZ runs it outputs the detailed information about all tracers and their dependencies to one another. For the example above one would get:
<pre>
readTracersFiles: RAW CONTENT OF SECTION "lmdz":
readTracersFiles: iq | hadv | vadv | name | parent | phase
readTracersFiles: ----+------+------+------------------------+------------------------+-------
readTracersFiles: 1 | 14 | 14 | H2O | air | g
readTracersFiles: 2 | 10 | 10 | H2O | air | ls
readTracersFiles: 3 | 10 | 10 | RN,PB | air | g
readTracersFiles: 4 | 10 | 10 | H2[18]O,H[2]HO,H2[16]O | H2O | gls
readTracersFiles: 5 | 10 | 10 | con,oce | H2[18]O,H[2]HO,H2[16]O | gls
readTracersFiles:
readTracersFiles: EXPANDED CONTENT OF SECTION "lmdz":
readTracersFiles: iq | hadv | vadv | name | parent | igen | phase
readTracersFiles: ----+------+------+---------------+-----------+------+-------
readTracersFiles: 1 | 14 | 14 | H2O_g | air | 0 | g
readTracersFiles: 2 | 10 | 10 | H2O_l | air | 0 | l
readTracersFiles: 3 | 10 | 10 | H2O_s | air | 0 | s
readTracersFiles: 4 | 10 | 10 | RN | air | 0 | g
readTracersFiles: 5 | 10 | 10 | PB | air | 0 | g
readTracersFiles: 6 | 10 | 10 | H2[18]O_g | H2O_g | 1 | g
readTracersFiles: 7 | 10 | 10 | H2[18]O_l | H2O_l | 1 | l
readTracersFiles: 8 | 10 | 10 | H2[18]O_s | H2O_s | 1 | s
readTracersFiles: 9 | 10 | 10 | H[2]HO_g | H2O_g | 1 | g
readTracersFiles: 10 | 10 | 10 | H[2]HO_l | H2O_l | 1 | l
readTracersFiles: 11 | 10 | 10 | H[2]HO_s | H2O_s | 1 | s
readTracersFiles: 12 | 10 | 10 | H2[16]O_g | H2O_g | 1 | g
readTracersFiles: 13 | 10 | 10 | H2[16]O_l | H2O_l | 1 | l
readTracersFiles: 14 | 10 | 10 | H2[16]O_s | H2O_s | 1 | s
readTracersFiles: 15 | 10 | 10 | H2[18]O_g_con | H2[18]O_g | 2 | g
readTracersFiles: 16 | 10 | 10 | H2[18]O_l_con | H2[18]O_l | 2 | l
readTracersFiles: 17 | 10 | 10 | H2[18]O_s_con | H2[18]O_s | 2 | s
readTracersFiles: 18 | 10 | 10 | H2[18]O_g_oce | H2[18]O_g | 2 | g
readTracersFiles: 19 | 10 | 10 | H2[18]O_l_oce | H2[18]O_l | 2 | l
readTracersFiles: 20 | 10 | 10 | H2[18]O_s_oce | H2[18]O_s | 2 | s
readTracersFiles: 21 | 10 | 10 | H[2]HO_g_con | H[2]HO_g | 2 | g
readTracersFiles: 22 | 10 | 10 | H[2]HO_l_con | H[2]HO_l | 2 | l
readTracersFiles: 23 | 10 | 10 | H[2]HO_s_con | H[2]HO_s | 2 | s
readTracersFiles: 24 | 10 | 10 | H[2]HO_g_oce | H[2]HO_g | 2 | g
readTracersFiles: 25 | 10 | 10 | H[2]HO_l_oce | H[2]HO_l | 2 | l
readTracersFiles: 26 | 10 | 10 | H[2]HO_s_oce | H[2]HO_s | 2 | s
readTracersFiles: 27 | 10 | 10 | H2[16]O_g_con | H2[16]O_g | 2 | g
readTracersFiles: 28 | 10 | 10 | H2[16]O_l_con | H2[16]O_l | 2 | l
readTracersFiles: 29 | 10 | 10 | H2[16]O_s_con | H2[16]O_s | 2 | s
readTracersFiles: 30 | 10 | 10 | H2[16]O_g_oce | H2[16]O_g | 2 | g
readTracersFiles: 31 | 10 | 10 | H2[16]O_l_oce | H2[16]O_l | 2 | l
readTracersFiles: 32 | 10 | 10 | H2[16]O_s_oce | H2[16]O_s | 2 | s
</pre>
03/01/2023
[[Category:WhatIs]]
912f6d86e573ae89beac5102c70a0663cc104413
296
295
2023-01-03T08:23:36Z
Emillour
3
wikitext
text/x-wiki
== The tracer.def input file ==
This file contains information on the tracers that will be advected in the dynamics. It should be used instead of the now depreciated [[WhatIs: The traceur.def input file|traceur.def]] input file.
== Simple example of a ''tracer.def'' file ==
In this example there are 4 tracers: 3 for water (one for each of its phases, gas, liquid or solid) and one called ''Aga''
<pre>
&version=1.0
&lmdz
default type=tracer phases=g hadv=10 vadv=10 parent=air
H2O hadv=14 vadv=14
H2O phases=ls
Aga
</pre>
* The mandatory first line ''&version'' is there to handle (potential) versioning of these file and their format
* The mandatory second line ''&lmdz'' is there to specify the scope of the following lines, i.e. that all that follow is relevant for the LMDZ lon-lat dynamical core.
* The mandatory third line starting with ''default'' specifies the default attributes for all the tracers. In this example that they are of type ''tracer'' (as opposed to type ''tag'' for tagging), that there phase is ''g'' (gas), that they are advected using advection schemes hadv and vadv ''10'' (Van Leer advection scheme) and that their parent (i.e. carrier fluid) is ''air''.
* Then one should specify on successive lines the tracer names and optionally their properties such as phases (g: gas, l: liquid, s:solid). Note that one may condense information about phases using a mix of letters g/l/s rather than specifying the information for each on a separate line. In practice the lines
<pre>
H2O hadv=14 vadv=14
H2O phases=ls
</pre>
From the example above which specifies there are 3 H2O phases (gas, liquid and solid), where the gas phase is advected with the hadv and vadv ''14'' dedicated scheme could also be written more explicitly as:
<pre>
H2O phases=g hadv=14 vadv=14
H2O phases=l
H2O phases=s
</pre>
== A more advanced example of a ''tracer.def file'' ==
The following example includes water isotopes (identified by the fact that their ''parent'' is not ''air'' but the tracer ''H2O'')
with two tags (''con'' and ''oce'')
<pre>
&version=1.0
&lmdz
default hadv=10 vadv=10 phases=g parent=air type=tracer
H2O hadv=14 vadv=14
H2O phases=ls
RN,PB
H2[18]O,H[2]HO,H2[16]O phases=gls parent=H2O
con,oce phases=gls parent=H2[18]O,H[2]HO,H2[16]O type=tag
</pre>
As LMDZ runs it outputs the detailed information about all tracers and their dependencies to one another. For the example above one would get:
<pre>
readTracersFiles: RAW CONTENT OF SECTION "lmdz":
readTracersFiles: iq | hadv | vadv | name | parent | phase
readTracersFiles: ----+------+------+------------------------+------------------------+-------
readTracersFiles: 1 | 14 | 14 | H2O | air | g
readTracersFiles: 2 | 10 | 10 | H2O | air | ls
readTracersFiles: 3 | 10 | 10 | RN,PB | air | g
readTracersFiles: 4 | 10 | 10 | H2[18]O,H[2]HO,H2[16]O | H2O | gls
readTracersFiles: 5 | 10 | 10 | con,oce | H2[18]O,H[2]HO,H2[16]O | gls
readTracersFiles:
readTracersFiles: EXPANDED CONTENT OF SECTION "lmdz":
readTracersFiles: iq | hadv | vadv | name | parent | igen | phase
readTracersFiles: ----+------+------+---------------+-----------+------+-------
readTracersFiles: 1 | 14 | 14 | H2O_g | air | 0 | g
readTracersFiles: 2 | 10 | 10 | H2O_l | air | 0 | l
readTracersFiles: 3 | 10 | 10 | H2O_s | air | 0 | s
readTracersFiles: 4 | 10 | 10 | RN | air | 0 | g
readTracersFiles: 5 | 10 | 10 | PB | air | 0 | g
readTracersFiles: 6 | 10 | 10 | H2[18]O_g | H2O_g | 1 | g
readTracersFiles: 7 | 10 | 10 | H2[18]O_l | H2O_l | 1 | l
readTracersFiles: 8 | 10 | 10 | H2[18]O_s | H2O_s | 1 | s
readTracersFiles: 9 | 10 | 10 | H[2]HO_g | H2O_g | 1 | g
readTracersFiles: 10 | 10 | 10 | H[2]HO_l | H2O_l | 1 | l
readTracersFiles: 11 | 10 | 10 | H[2]HO_s | H2O_s | 1 | s
readTracersFiles: 12 | 10 | 10 | H2[16]O_g | H2O_g | 1 | g
readTracersFiles: 13 | 10 | 10 | H2[16]O_l | H2O_l | 1 | l
readTracersFiles: 14 | 10 | 10 | H2[16]O_s | H2O_s | 1 | s
readTracersFiles: 15 | 10 | 10 | H2[18]O_g_con | H2[18]O_g | 2 | g
readTracersFiles: 16 | 10 | 10 | H2[18]O_l_con | H2[18]O_l | 2 | l
readTracersFiles: 17 | 10 | 10 | H2[18]O_s_con | H2[18]O_s | 2 | s
readTracersFiles: 18 | 10 | 10 | H2[18]O_g_oce | H2[18]O_g | 2 | g
readTracersFiles: 19 | 10 | 10 | H2[18]O_l_oce | H2[18]O_l | 2 | l
readTracersFiles: 20 | 10 | 10 | H2[18]O_s_oce | H2[18]O_s | 2 | s
readTracersFiles: 21 | 10 | 10 | H[2]HO_g_con | H[2]HO_g | 2 | g
readTracersFiles: 22 | 10 | 10 | H[2]HO_l_con | H[2]HO_l | 2 | l
readTracersFiles: 23 | 10 | 10 | H[2]HO_s_con | H[2]HO_s | 2 | s
readTracersFiles: 24 | 10 | 10 | H[2]HO_g_oce | H[2]HO_g | 2 | g
readTracersFiles: 25 | 10 | 10 | H[2]HO_l_oce | H[2]HO_l | 2 | l
readTracersFiles: 26 | 10 | 10 | H[2]HO_s_oce | H[2]HO_s | 2 | s
readTracersFiles: 27 | 10 | 10 | H2[16]O_g_con | H2[16]O_g | 2 | g
readTracersFiles: 28 | 10 | 10 | H2[16]O_l_con | H2[16]O_l | 2 | l
readTracersFiles: 29 | 10 | 10 | H2[16]O_s_con | H2[16]O_s | 2 | s
readTracersFiles: 30 | 10 | 10 | H2[16]O_g_oce | H2[16]O_g | 2 | g
readTracersFiles: 31 | 10 | 10 | H2[16]O_l_oce | H2[16]O_l | 2 | l
readTracersFiles: 32 | 10 | 10 | H2[16]O_s_oce | H2[16]O_s | 2 | s
</pre>
03/01/2023
[[Category:WhatIs]]
22c9db846301308f42b59024a29a40f88ef91914
298
296
2023-01-03T12:00:06Z
Lguez
4
wikitext
text/x-wiki
== The tracer.def input file ==
This file contains information on the tracers that will be advected in the dynamics. It should be used instead of the now deprecated [[WhatIs: The traceur.def input file|traceur.def]] input file.
== Simple example of a ''tracer.def'' file ==
In this example there are 4 tracers: 3 for water (one for each of its phases, gas, liquid or solid) and one called ''Aga''
<pre>
&version=1.0
&lmdz
default type=tracer phases=g hadv=10 vadv=10 parent=air
H2O hadv=14 vadv=14
H2O phases=ls
Aga
</pre>
* The mandatory first line ''&version'' is there to handle (potential) versioning of these file and their format
* The mandatory second line ''&lmdz'' is there to specify the scope of the following lines, i.e. that all that follow is relevant for the LMDZ lon-lat dynamical core.
* The mandatory third line starting with ''default'' specifies the default attributes for all the tracers. In this example that they are of type ''tracer'' (as opposed to type ''tag'' for tagging), that there phase is ''g'' (gas), that they are advected using advection schemes hadv and vadv ''10'' (Van Leer advection scheme) and that their parent (i.e. carrier fluid) is ''air''.
* Then one should specify on successive lines the tracer names and optionally their properties such as phases (g: gas, l: liquid, s:solid). Note that one may condense information about phases using a mix of letters g/l/s rather than specifying the information for each on a separate line. In practice the lines
<pre>
H2O hadv=14 vadv=14
H2O phases=ls
</pre>
From the example above which specifies there are 3 H2O phases (gas, liquid and solid), where the gas phase is advected with the hadv and vadv ''14'' dedicated scheme could also be written more explicitly as:
<pre>
H2O phases=g hadv=14 vadv=14
H2O phases=l
H2O phases=s
</pre>
== A more advanced example of a ''tracer.def file'' ==
The following example includes water isotopes (identified by the fact that their ''parent'' is not ''air'' but the tracer ''H2O'')
with two tags (''con'' and ''oce'')
<pre>
&version=1.0
&lmdz
default hadv=10 vadv=10 phases=g parent=air type=tracer
H2O hadv=14 vadv=14
H2O phases=ls
RN,PB
H2[18]O,H[2]HO,H2[16]O phases=gls parent=H2O
con,oce phases=gls parent=H2[18]O,H[2]HO,H2[16]O type=tag
</pre>
As LMDZ runs it outputs the detailed information about all tracers and their dependencies to one another. For the example above one would get:
<pre>
readTracersFiles: RAW CONTENT OF SECTION "lmdz":
readTracersFiles: iq | hadv | vadv | name | parent | phase
readTracersFiles: ----+------+------+------------------------+------------------------+-------
readTracersFiles: 1 | 14 | 14 | H2O | air | g
readTracersFiles: 2 | 10 | 10 | H2O | air | ls
readTracersFiles: 3 | 10 | 10 | RN,PB | air | g
readTracersFiles: 4 | 10 | 10 | H2[18]O,H[2]HO,H2[16]O | H2O | gls
readTracersFiles: 5 | 10 | 10 | con,oce | H2[18]O,H[2]HO,H2[16]O | gls
readTracersFiles:
readTracersFiles: EXPANDED CONTENT OF SECTION "lmdz":
readTracersFiles: iq | hadv | vadv | name | parent | igen | phase
readTracersFiles: ----+------+------+---------------+-----------+------+-------
readTracersFiles: 1 | 14 | 14 | H2O_g | air | 0 | g
readTracersFiles: 2 | 10 | 10 | H2O_l | air | 0 | l
readTracersFiles: 3 | 10 | 10 | H2O_s | air | 0 | s
readTracersFiles: 4 | 10 | 10 | RN | air | 0 | g
readTracersFiles: 5 | 10 | 10 | PB | air | 0 | g
readTracersFiles: 6 | 10 | 10 | H2[18]O_g | H2O_g | 1 | g
readTracersFiles: 7 | 10 | 10 | H2[18]O_l | H2O_l | 1 | l
readTracersFiles: 8 | 10 | 10 | H2[18]O_s | H2O_s | 1 | s
readTracersFiles: 9 | 10 | 10 | H[2]HO_g | H2O_g | 1 | g
readTracersFiles: 10 | 10 | 10 | H[2]HO_l | H2O_l | 1 | l
readTracersFiles: 11 | 10 | 10 | H[2]HO_s | H2O_s | 1 | s
readTracersFiles: 12 | 10 | 10 | H2[16]O_g | H2O_g | 1 | g
readTracersFiles: 13 | 10 | 10 | H2[16]O_l | H2O_l | 1 | l
readTracersFiles: 14 | 10 | 10 | H2[16]O_s | H2O_s | 1 | s
readTracersFiles: 15 | 10 | 10 | H2[18]O_g_con | H2[18]O_g | 2 | g
readTracersFiles: 16 | 10 | 10 | H2[18]O_l_con | H2[18]O_l | 2 | l
readTracersFiles: 17 | 10 | 10 | H2[18]O_s_con | H2[18]O_s | 2 | s
readTracersFiles: 18 | 10 | 10 | H2[18]O_g_oce | H2[18]O_g | 2 | g
readTracersFiles: 19 | 10 | 10 | H2[18]O_l_oce | H2[18]O_l | 2 | l
readTracersFiles: 20 | 10 | 10 | H2[18]O_s_oce | H2[18]O_s | 2 | s
readTracersFiles: 21 | 10 | 10 | H[2]HO_g_con | H[2]HO_g | 2 | g
readTracersFiles: 22 | 10 | 10 | H[2]HO_l_con | H[2]HO_l | 2 | l
readTracersFiles: 23 | 10 | 10 | H[2]HO_s_con | H[2]HO_s | 2 | s
readTracersFiles: 24 | 10 | 10 | H[2]HO_g_oce | H[2]HO_g | 2 | g
readTracersFiles: 25 | 10 | 10 | H[2]HO_l_oce | H[2]HO_l | 2 | l
readTracersFiles: 26 | 10 | 10 | H[2]HO_s_oce | H[2]HO_s | 2 | s
readTracersFiles: 27 | 10 | 10 | H2[16]O_g_con | H2[16]O_g | 2 | g
readTracersFiles: 28 | 10 | 10 | H2[16]O_l_con | H2[16]O_l | 2 | l
readTracersFiles: 29 | 10 | 10 | H2[16]O_s_con | H2[16]O_s | 2 | s
readTracersFiles: 30 | 10 | 10 | H2[16]O_g_oce | H2[16]O_g | 2 | g
readTracersFiles: 31 | 10 | 10 | H2[16]O_l_oce | H2[16]O_l | 2 | l
readTracersFiles: 32 | 10 | 10 | H2[16]O_s_oce | H2[16]O_s | 2 | s
</pre>
03/01/2023
[[Category:WhatIs]]
601ba4d0535f4da27d63abef11ba8c5a98063233
299
298
2023-01-03T12:01:00Z
Lguez
4
wikitext
text/x-wiki
== The tracer.def input file ==
This file contains information on the tracers that will be advected in the dynamics. It should be used instead of the now deprecated [[WhatIs: The traceur.def input file|traceur.def]] input file.
== Simple example of a ''tracer.def'' file ==
In this example there are 4 tracers: 3 for water (one for each of its phases, gas, liquid or solid) and one called ''Aga'' (age of air)
<pre>
&version=1.0
&lmdz
default type=tracer phases=g hadv=10 vadv=10 parent=air
H2O hadv=14 vadv=14
H2O phases=ls
Aga
</pre>
* The mandatory first line ''&version'' is there to handle (potential) versioning of these file and their format
* The mandatory second line ''&lmdz'' is there to specify the scope of the following lines, i.e. that all that follow is relevant for the LMDZ lon-lat dynamical core.
* The mandatory third line starting with ''default'' specifies the default attributes for all the tracers. In this example that they are of type ''tracer'' (as opposed to type ''tag'' for tagging), that there phase is ''g'' (gas), that they are advected using advection schemes hadv and vadv ''10'' (Van Leer advection scheme) and that their parent (i.e. carrier fluid) is ''air''.
* Then one should specify on successive lines the tracer names and optionally their properties such as phases (g: gas, l: liquid, s:solid). Note that one may condense information about phases using a mix of letters g/l/s rather than specifying the information for each on a separate line. In practice the lines
<pre>
H2O hadv=14 vadv=14
H2O phases=ls
</pre>
From the example above which specifies there are 3 H2O phases (gas, liquid and solid), where the gas phase is advected with the hadv and vadv ''14'' dedicated scheme could also be written more explicitly as:
<pre>
H2O phases=g hadv=14 vadv=14
H2O phases=l
H2O phases=s
</pre>
== A more advanced example of a ''tracer.def file'' ==
The following example includes water isotopes (identified by the fact that their ''parent'' is not ''air'' but the tracer ''H2O'')
with two tags (''con'' and ''oce'')
<pre>
&version=1.0
&lmdz
default hadv=10 vadv=10 phases=g parent=air type=tracer
H2O hadv=14 vadv=14
H2O phases=ls
RN,PB
H2[18]O,H[2]HO,H2[16]O phases=gls parent=H2O
con,oce phases=gls parent=H2[18]O,H[2]HO,H2[16]O type=tag
</pre>
As LMDZ runs it outputs the detailed information about all tracers and their dependencies to one another. For the example above one would get:
<pre>
readTracersFiles: RAW CONTENT OF SECTION "lmdz":
readTracersFiles: iq | hadv | vadv | name | parent | phase
readTracersFiles: ----+------+------+------------------------+------------------------+-------
readTracersFiles: 1 | 14 | 14 | H2O | air | g
readTracersFiles: 2 | 10 | 10 | H2O | air | ls
readTracersFiles: 3 | 10 | 10 | RN,PB | air | g
readTracersFiles: 4 | 10 | 10 | H2[18]O,H[2]HO,H2[16]O | H2O | gls
readTracersFiles: 5 | 10 | 10 | con,oce | H2[18]O,H[2]HO,H2[16]O | gls
readTracersFiles:
readTracersFiles: EXPANDED CONTENT OF SECTION "lmdz":
readTracersFiles: iq | hadv | vadv | name | parent | igen | phase
readTracersFiles: ----+------+------+---------------+-----------+------+-------
readTracersFiles: 1 | 14 | 14 | H2O_g | air | 0 | g
readTracersFiles: 2 | 10 | 10 | H2O_l | air | 0 | l
readTracersFiles: 3 | 10 | 10 | H2O_s | air | 0 | s
readTracersFiles: 4 | 10 | 10 | RN | air | 0 | g
readTracersFiles: 5 | 10 | 10 | PB | air | 0 | g
readTracersFiles: 6 | 10 | 10 | H2[18]O_g | H2O_g | 1 | g
readTracersFiles: 7 | 10 | 10 | H2[18]O_l | H2O_l | 1 | l
readTracersFiles: 8 | 10 | 10 | H2[18]O_s | H2O_s | 1 | s
readTracersFiles: 9 | 10 | 10 | H[2]HO_g | H2O_g | 1 | g
readTracersFiles: 10 | 10 | 10 | H[2]HO_l | H2O_l | 1 | l
readTracersFiles: 11 | 10 | 10 | H[2]HO_s | H2O_s | 1 | s
readTracersFiles: 12 | 10 | 10 | H2[16]O_g | H2O_g | 1 | g
readTracersFiles: 13 | 10 | 10 | H2[16]O_l | H2O_l | 1 | l
readTracersFiles: 14 | 10 | 10 | H2[16]O_s | H2O_s | 1 | s
readTracersFiles: 15 | 10 | 10 | H2[18]O_g_con | H2[18]O_g | 2 | g
readTracersFiles: 16 | 10 | 10 | H2[18]O_l_con | H2[18]O_l | 2 | l
readTracersFiles: 17 | 10 | 10 | H2[18]O_s_con | H2[18]O_s | 2 | s
readTracersFiles: 18 | 10 | 10 | H2[18]O_g_oce | H2[18]O_g | 2 | g
readTracersFiles: 19 | 10 | 10 | H2[18]O_l_oce | H2[18]O_l | 2 | l
readTracersFiles: 20 | 10 | 10 | H2[18]O_s_oce | H2[18]O_s | 2 | s
readTracersFiles: 21 | 10 | 10 | H[2]HO_g_con | H[2]HO_g | 2 | g
readTracersFiles: 22 | 10 | 10 | H[2]HO_l_con | H[2]HO_l | 2 | l
readTracersFiles: 23 | 10 | 10 | H[2]HO_s_con | H[2]HO_s | 2 | s
readTracersFiles: 24 | 10 | 10 | H[2]HO_g_oce | H[2]HO_g | 2 | g
readTracersFiles: 25 | 10 | 10 | H[2]HO_l_oce | H[2]HO_l | 2 | l
readTracersFiles: 26 | 10 | 10 | H[2]HO_s_oce | H[2]HO_s | 2 | s
readTracersFiles: 27 | 10 | 10 | H2[16]O_g_con | H2[16]O_g | 2 | g
readTracersFiles: 28 | 10 | 10 | H2[16]O_l_con | H2[16]O_l | 2 | l
readTracersFiles: 29 | 10 | 10 | H2[16]O_s_con | H2[16]O_s | 2 | s
readTracersFiles: 30 | 10 | 10 | H2[16]O_g_oce | H2[16]O_g | 2 | g
readTracersFiles: 31 | 10 | 10 | H2[16]O_l_oce | H2[16]O_l | 2 | l
readTracersFiles: 32 | 10 | 10 | H2[16]O_s_oce | H2[16]O_s | 2 | s
</pre>
03/01/2023
[[Category:WhatIs]]
7e2bb9720ecf2e8fecf80282555b66ccb17c19eb
The netCDF library
0
125
297
2023-01-03T11:40:27Z
Emillour
3
Page créée avec « == the NetCDF library == The model reads and writes input and output files in NetCDF (Network Common Data Form) format (developed and maintained by Unidata: https://www.un... »
wikitext
text/x-wiki
== the NetCDF library ==
The model reads and writes input and output files in NetCDF (Network Common Data Form) format (developed and maintained by Unidata: https://www.unidata.ucar.edu/software/netcdf/ ) and therefore a NetCDF library must be at hand when compiling and running LMDZ6.
As this library is not quite standard, chances are that you might need to install it yourself on your system (note that the [[WhatIs: The install lmdz.sh script|install_lmdz.sh]] default behavior is to download and install that library), hence this page with some indications on how to do so.
=== Checking if a NetCDF library is already available ===
It is possible that the library, including its Fortran component, is already available. An easy way to check this is to see if the related utilities like '''ncdump''' are available, i.e. that
<syntaxhighlight lang="bash">
which ncdump
</syntaxhighlight>
returns a positive answer.
Note that this does not suffice as the full library, including its Fortran component, and not just the related utilities are required. A neat way to check this is to use the '''nf-config'''
<syntaxhighlight lang="bash">
nf-config --all
</syntaxhighlight>
returns something meaningful. If not, you probably need to take some action along the lines of what is indicated in the following sections.
=== Install via a system manager ===
fc69f92d1b1648808e1e4f5e1ae67f844b9b7fc9
300
297
2023-01-03T12:43:41Z
Emillour
3
wikitext
text/x-wiki
== the NetCDF library ==
The model reads and writes input and output files in NetCDF (Network Common Data Form) format (developed and maintained by Unidata: https://www.unidata.ucar.edu/software/netcdf/ ) and therefore a NetCDF library must be at hand when compiling and running LMDZ6.
As this library is not quite standard, chances are that you might need to install it yourself on your system (note that the [[WhatIs: The install lmdz.sh script|install_lmdz.sh]] default behavior is to download and install that library), hence this page with some indications on how to do so.
=== Checking if a NetCDF library is already available ===
It is possible that the library, including its Fortran component, is already available. An easy way to check this is to see if the related utilities like '''ncdump''' are available, i.e. that
<syntaxhighlight lang="bash">
which ncdump
</syntaxhighlight>
returns a positive answer.
Note that this does not suffice as the full library, including its Fortran component, and not just the related utilities are required. A neat way to check this is to use the '''nf-config'''
<syntaxhighlight lang="bash">
nf-config --all
</syntaxhighlight>
returns something meaningful. If not, you probably need to take some action along the lines of what is indicated in the following sections.
=== Install via a system manager ===
If on Ubuntu (and with admin, i.e. ''sudo'' rights) you can try
<syntaxhighlight lang="bash">
sudo apt install libnetcdff-dev
</syntaxhighlight>
=== Personal installation ===
One can always download the source code and compile the NetCDF library (see https://docs.unidata.ucar.edu/netcdf-c/current/faq.html#HowdoIgetthenetCDFsoftwarepackage ). You can use the following home-made "install_netcdf4_hdf5_seq.bash" script to do so. For this, ensure that you are in your home directory:
<syntaxhighlight lang="bash">
mkdir netcdf
cd netcdf
wget -nv --no-check-certificate http://www.lmd.jussieu.fr/~lmdz/pub/import/install_netcdf4_hdf5_seq.bash
chmod u=rwx install_netcdf4_hdf5_seq.bash
./install_netcdf4_hdf5_seq.bash > netcdf.log 2>&1
</syntaxhighlight>
Compiling the library and dependencies can take a while (>>15 minutes; be patient).
Once this is done, check file netcdf.log to verify that all went well.
You may want to also add its "bin" directory to your PATH environment variable by adding in your .bashrc a line of:
<syntaxhighlight lang="bash">
export PATH=$PATH:$HOME/netcdf/bin
</syntaxhighlight>
The assumption here is that you have run the "install_netcdf4_hdf5_seq.bash" script in a "netcdf" subdirectory of your home directory. Adapt accordingly if not.
03/01/2022
[[Category:HowTo]]
[[Category:WhatIs]]
38b950d5169e06bfb99859ae3356103598e52e3d
301
300
2023-01-03T13:50:02Z
Emillour
3
wikitext
text/x-wiki
== the NetCDF library ==
The model reads and writes input and output files in NetCDF (Network Common Data Form) format (developed and maintained by Unidata: https://www.unidata.ucar.edu/software/netcdf/ ) and therefore a NetCDF library must be at hand when compiling and running LMDZ6.
As this library is not quite standard, chances are that you might need to install it yourself on your system (note that the [[WhatIs: The install lmdz.sh script|install_lmdz.sh]] default behavior is to download and install that library), hence this page with some indications on how to do so.
== Checking if a NetCDF library is already available ==
It is possible that the library, including its Fortran component, is already available. An easy way to check this is to see if the related utilities like '''ncdump''' are available, i.e. that
<syntaxhighlight lang="bash">
which ncdump
</syntaxhighlight>
returns a positive answer.
Note that this does not suffice as the full library, including its Fortran component, and not just the related utilities are required. A neat way to check this is to use the '''nf-config'''
<syntaxhighlight lang="bash">
nf-config --all
</syntaxhighlight>
returns something meaningful. If not, you probably need to take some action along the lines of what is indicated in the following sections.
== Various ways to install the NetCDF library ==
=== Install via a system manager ===
If on Ubuntu (and with admin, i.e. ''sudo'' rights) you can try
<syntaxhighlight lang="bash">
sudo apt install libnetcdff-dev
</syntaxhighlight>
=== Personal installation ===
One can always download the source code and compile the NetCDF library (see https://docs.unidata.ucar.edu/netcdf-c/current/faq.html#HowdoIgetthenetCDFsoftwarepackage ). You can use the following home-made "install_netcdf4_hdf5_seq.bash" script to do so. For this, ensure that you are in your home directory and:
<syntaxhighlight lang="bash">
mkdir netcdf
cd netcdf
wget -nv --no-check-certificate http://www.lmd.jussieu.fr/~lmdz/pub/import/install_netcdf4_hdf5_seq.bash
chmod u=rwx install_netcdf4_hdf5_seq.bash
./install_netcdf4_hdf5_seq.bash > netcdf.log 2>&1
</syntaxhighlight>
Compiling the library and dependencies can take a while (>>15 minutes; be patient).
Once this is done, check file netcdf.log to verify that all went well.
You may want to also add its "bin" directory to your PATH environment variable by adding in your .bashrc a line of:
<syntaxhighlight lang="bash">
export PATH=$PATH:$HOME/netcdf/bin
</syntaxhighlight>
The assumption here is that you have run the "install_netcdf4_hdf5_seq.bash" script in a "netcdf" subdirectory of your home directory. Adapt accordingly if not.
Check that the installation was successfully installed :-)
Again, a neat way to do that is to run and check the output of
<syntaxhighlight lang="bash">
nf-config --all
</syntaxhighlight>
=== Personal installation of an advanced NetCDF4-HDF5 library with MPI enabled ===
This specific version is useful especially if running with the XIOS library.
A prerequisite is to have an MPI library installed and available.
You can use the following home-made "install_netcdf4_hdf5_seq.bash" script to do so. For this, ensure that you are in your home directory and:
<syntaxhighlight lang="bash">
mkdir netcdf4hdf5
cd netcdf4hdf5
wget -nv --no-check-certificate http://www.lmd.jussieu.fr/~lmdz/pub/import/install_netcdf4_hdf5.bash
chmod u=rwx install_netcdf4_hdf5.bash
./install_netcdf4_hdf5.bash -CC mpicc -FC mpif90 -CXX mpiCC -MPI /path/to/your/MPI/install > netcdf.log 2>&1
</syntaxhighlight>
You should of course adapt the command line, especially the ''-MPI /path/to/your/MPI/install'' part to your settings.
Compiling the library and dependencies can take a while (>>15 minutes; be patient).
Once this is done, check file netcdf.log to verify that all went well.
You may want to also add its "bin" directory to your PATH environment variable by adding in your .bashrc a line of:
<syntaxhighlight lang="bash">
export PATH=$PATH:$HOME/netcdf4hdf5/bin
</syntaxhighlight>
The assumption here is that you have run the "install_netcdf4_hdf5.bash" script in a "netcdf4hdf5" subdirectory of your home directory. Adapt accordingly if not.
Check that the installation was successfully installed :-)
Again, a neat way to do that is to run and check the output of
<syntaxhighlight lang="bash">
nf-config --all
</syntaxhighlight>
03/01/2022
[[Category:HowTo]]
[[Category:WhatIs]]
def08ad2b1fe3a969e4c89790d94f48d329bb7be
302
301
2023-01-03T14:19:16Z
Lguez
4
wikitext
text/x-wiki
== the NetCDF library ==
The model reads and writes input and output files in NetCDF (Network Common Data Form) format (developed and maintained by Unidata: https://www.unidata.ucar.edu/software/netcdf/ ) and therefore a NetCDF library must be at hand when compiling and running LMDZ6.
As this library is not quite standard, chances are that you might need to install it yourself on your system (note that the [[WhatIs: The install lmdz.sh script|install_lmdz.sh]] default behavior is to download and install that library), hence this page with some indications on how to do so.
== Checking if a NetCDF library is already available ==
It is possible that the library, including its Fortran component, is already available. An easy way to check this is to see if the related utilities like '''ncdump''' are available, i.e. that
<syntaxhighlight lang="bash">
which ncdump
</syntaxhighlight>
returns a positive answer.
Note that this does not suffice as the full library, including its Fortran component, and not just the related utilities are required. A neat way to check this is to use the '''nf-config'''
<syntaxhighlight lang="bash">
nf-config --all
</syntaxhighlight>
returns something meaningful. If not, you probably need to take some action along the lines of what is indicated in the following sections.
== Various ways to install the NetCDF library ==
=== Install via a system manager ===
This is the easiest (and recommended) way. If on Ubuntu (and with admin, i.e. ''sudo'' rights) you can try
<syntaxhighlight lang="bash">
sudo apt install netcdf-bin libnetcdff-dev
</syntaxhighlight>
=== Personal installation ===
One can always download the source code and compile the NetCDF library (see https://docs.unidata.ucar.edu/netcdf-c/current/faq.html#HowdoIgetthenetCDFsoftwarepackage ). You can use the following home-made "install_netcdf4_hdf5_seq.bash" script to do so. For this, ensure that you are in your home directory and:
<syntaxhighlight lang="bash">
mkdir netcdf
cd netcdf
wget -nv --no-check-certificate http://www.lmd.jussieu.fr/~lmdz/pub/import/install_netcdf4_hdf5_seq.bash
chmod u=rwx install_netcdf4_hdf5_seq.bash
./install_netcdf4_hdf5_seq.bash > netcdf.log 2>&1
</syntaxhighlight>
Compiling the library and dependencies can take a while (>>15 minutes; be patient).
Once this is done, check file netcdf.log to verify that all went well.
You may want to also add its "bin" directory to your PATH environment variable by adding in your .bashrc a line of:
<syntaxhighlight lang="bash">
export PATH=$PATH:$HOME/netcdf/bin
</syntaxhighlight>
The assumption here is that you have run the "install_netcdf4_hdf5_seq.bash" script in a "netcdf" subdirectory of your home directory. Adapt accordingly if not.
Check that the installation was successfully installed :-)
Again, a neat way to do that is to run and check the output of
<syntaxhighlight lang="bash">
nf-config --all
</syntaxhighlight>
=== Personal installation of an advanced NetCDF4-HDF5 library with MPI enabled ===
This specific version is useful especially if running with the XIOS library.
A prerequisite is to have an MPI library installed and available.
You can use the following home-made "install_netcdf4_hdf5_seq.bash" script to do so. For this, ensure that you are in your home directory and:
<syntaxhighlight lang="bash">
mkdir netcdf4hdf5
cd netcdf4hdf5
wget -nv --no-check-certificate http://www.lmd.jussieu.fr/~lmdz/pub/import/install_netcdf4_hdf5.bash
chmod u=rwx install_netcdf4_hdf5.bash
./install_netcdf4_hdf5.bash -CC mpicc -FC mpif90 -CXX mpiCC -MPI /path/to/your/MPI/install > netcdf.log 2>&1
</syntaxhighlight>
You should of course adapt the command line, especially the ''-MPI /path/to/your/MPI/install'' part to your settings.
Compiling the library and dependencies can take a while (>>15 minutes; be patient).
Once this is done, check file netcdf.log to verify that all went well.
You may want to also add its "bin" directory to your PATH environment variable by adding in your .bashrc a line of:
<syntaxhighlight lang="bash">
export PATH=$PATH:$HOME/netcdf4hdf5/bin
</syntaxhighlight>
The assumption here is that you have run the "install_netcdf4_hdf5.bash" script in a "netcdf4hdf5" subdirectory of your home directory. Adapt accordingly if not.
Check that the installation was successfully installed :-)
Again, a neat way to do that is to run and check the output of
<syntaxhighlight lang="bash">
nf-config --all
</syntaxhighlight>
03/01/2022
[[Category:HowTo]]
[[Category:WhatIs]]
803693a9a16c55333eac350de9996aafbfdcb95b
303
302
2023-01-03T14:29:36Z
Lguez
4
wikitext
text/x-wiki
== the NetCDF library ==
The model reads and writes input and output files in NetCDF (Network Common Data Form) format (developed and maintained by Unidata: https://www.unidata.ucar.edu/software/netcdf/ ) and therefore a NetCDF library must be at hand when compiling and running LMDZ6.
As this library is not quite standard, chances are that you might need to install it yourself on your system (note that the [[WhatIs: The install lmdz.sh script|install_lmdz.sh]] default behavior is to download and install that library), hence this page with some indications on how to do so.
== Checking if a NetCDF library is already available ==
It is possible that the library, including its Fortran component, is already available. An easy way to check this is to see if the related utilities like '''ncdump''' are available, i.e. that
<syntaxhighlight lang="bash">
which ncdump
</syntaxhighlight>
returns a positive answer.
Note that this does not suffice as the full library, including its Fortran component, and not just the related utilities are required. A neat way to check this is to use the '''nf-config'''
<syntaxhighlight lang="bash">
nf-config --all
</syntaxhighlight>
returns something meaningful. If not, you probably need to take some action along the lines of what is indicated in the following sections.
== Various ways to install the NetCDF library ==
=== Install from the package repository of your Linux distribution ===
This is the easiest (and recommended) way. If your distribution is Ubuntu or Linux Mint (and you have admin, i.e. ''sudo'' rights), open a terminal and type:
<syntaxhighlight lang="bash">
sudo apt install netcdf-bin libnetcdff-dev
</syntaxhighlight>
=== Personal installation ===
One can always download the source code and compile the NetCDF library (see https://docs.unidata.ucar.edu/netcdf-c/current/faq.html#HowdoIgetthenetCDFsoftwarepackage ). You can use the following home-made "install_netcdf4_hdf5_seq.bash" script to do so. For this, ensure that you are in your home directory and:
<syntaxhighlight lang="bash">
mkdir netcdf
cd netcdf
wget -nv --no-check-certificate http://www.lmd.jussieu.fr/~lmdz/pub/import/install_netcdf4_hdf5_seq.bash
chmod u=rwx install_netcdf4_hdf5_seq.bash
./install_netcdf4_hdf5_seq.bash > netcdf.log 2>&1
</syntaxhighlight>
Compiling the library and dependencies can take a while (>>15 minutes; be patient).
Once this is done, check file netcdf.log to verify that all went well.
You may want to also add its "bin" directory to your PATH environment variable by adding in your .bashrc a line of:
<syntaxhighlight lang="bash">
export PATH=$PATH:$HOME/netcdf/bin
</syntaxhighlight>
The assumption here is that you have run the "install_netcdf4_hdf5_seq.bash" script in a "netcdf" subdirectory of your home directory. Adapt accordingly if not.
Check that the installation was successfully installed :-)
Again, a neat way to do that is to run and check the output of
<syntaxhighlight lang="bash">
nf-config --all
</syntaxhighlight>
=== Personal installation of an advanced NetCDF4-HDF5 library with MPI enabled ===
This specific version is useful especially if running with the XIOS library.
A prerequisite is to have an MPI library installed and available.
You can use the following home-made "install_netcdf4_hdf5_seq.bash" script to do so. For this, ensure that you are in your home directory and:
<syntaxhighlight lang="bash">
mkdir netcdf4hdf5
cd netcdf4hdf5
wget -nv --no-check-certificate http://www.lmd.jussieu.fr/~lmdz/pub/import/install_netcdf4_hdf5.bash
chmod u=rwx install_netcdf4_hdf5.bash
./install_netcdf4_hdf5.bash -CC mpicc -FC mpif90 -CXX mpiCC -MPI /path/to/your/MPI/install > netcdf.log 2>&1
</syntaxhighlight>
You should of course adapt the command line, especially the ''-MPI /path/to/your/MPI/install'' part to your settings.
Compiling the library and dependencies can take a while (>>15 minutes; be patient).
Once this is done, check file netcdf.log to verify that all went well.
You may want to also add its "bin" directory to your PATH environment variable by adding in your .bashrc a line of:
<syntaxhighlight lang="bash">
export PATH=$PATH:$HOME/netcdf4hdf5/bin
</syntaxhighlight>
The assumption here is that you have run the "install_netcdf4_hdf5.bash" script in a "netcdf4hdf5" subdirectory of your home directory. Adapt accordingly if not.
Check that the installation was successfully installed :-)
Again, a neat way to do that is to run and check the output of
<syntaxhighlight lang="bash">
nf-config --all
</syntaxhighlight>
03/01/2022
[[Category:HowTo]]
[[Category:WhatIs]]
b74cf40a0aca35b90ccfafcdd7e9a79c05331740
304
303
2023-01-03T14:34:05Z
Lguez
4
wikitext
text/x-wiki
== the NetCDF library ==
The model reads and writes input and output files in NetCDF (Network Common Data Form) format (developed and maintained by Unidata: https://www.unidata.ucar.edu/software/netcdf/ ) and therefore a NetCDF library must be at hand when compiling and running LMDZ6.
As this library is not quite standard, chances are that you might need to install it yourself on your system (note that the [[WhatIs: The install lmdz.sh script|install_lmdz.sh]] default behavior is to download and install that library), hence this page with some indications on how to do so.
== Checking if a NetCDF library is already available ==
It is possible that the library, including its Fortran component, is already available. An easy way to check this is to see if the related utilities like '''ncdump''' are available, i.e. that
<syntaxhighlight lang="bash">
which ncdump
</syntaxhighlight>
returns a positive answer.
Note that this does not suffice as the full library, including its Fortran component, and not just the related utilities are required. A neat way to check this is to use the '''nf-config'''
<syntaxhighlight lang="bash">
nf-config --all
</syntaxhighlight>
returns something meaningful. If not, you probably need to take some action along the lines of what is indicated in the following sections.
== Various ways to install the NetCDF library ==
=== Install from the package repository of your Linux distribution ===
This is the easiest (and recommended) way. For exemple, if your distribution is Ubuntu or Linux Mint (and you have admin, i.e. ''sudo'' rights), open a terminal and type:
<syntaxhighlight lang="bash">
sudo apt install netcdf-bin libnetcdff-dev
</syntaxhighlight>
=== Personal installation ===
One can always download the source code and compile the NetCDF library (see https://docs.unidata.ucar.edu/netcdf-c/current/faq.html#HowdoIgetthenetCDFsoftwarepackage ). You can use the following home-made "install_netcdf4_hdf5_seq.bash" script to do so. For this, ensure that you are in your home directory and:
<syntaxhighlight lang="bash">
mkdir netcdf
cd netcdf
wget -nv --no-check-certificate http://www.lmd.jussieu.fr/~lmdz/pub/import/install_netcdf4_hdf5_seq.bash
chmod u=rwx install_netcdf4_hdf5_seq.bash
./install_netcdf4_hdf5_seq.bash > netcdf.log 2>&1
</syntaxhighlight>
Compiling the library and dependencies can take a while (>>15 minutes; be patient).
Once this is done, check file netcdf.log to verify that all went well.
You may want to also add its "bin" directory to your PATH environment variable by adding in your .bashrc a line of:
<syntaxhighlight lang="bash">
export PATH=$PATH:$HOME/netcdf/bin
</syntaxhighlight>
The assumption here is that you have run the "install_netcdf4_hdf5_seq.bash" script in a "netcdf" subdirectory of your home directory. Adapt accordingly if not.
Check that the installation was successfully installed :-)
Again, a neat way to do that is to run and check the output of
<syntaxhighlight lang="bash">
nf-config --all
</syntaxhighlight>
=== Personal installation of an advanced NetCDF4-HDF5 library with MPI enabled ===
This specific version is useful especially if running with the XIOS library.
A prerequisite is to have an MPI library installed and available.
You can use the following home-made "install_netcdf4_hdf5_seq.bash" script to do so. For this, ensure that you are in your home directory and:
<syntaxhighlight lang="bash">
mkdir netcdf4hdf5
cd netcdf4hdf5
wget -nv --no-check-certificate http://www.lmd.jussieu.fr/~lmdz/pub/import/install_netcdf4_hdf5.bash
chmod u=rwx install_netcdf4_hdf5.bash
./install_netcdf4_hdf5.bash -CC mpicc -FC mpif90 -CXX mpiCC -MPI /path/to/your/MPI/install > netcdf.log 2>&1
</syntaxhighlight>
You should of course adapt the command line, especially the ''-MPI /path/to/your/MPI/install'' part to your settings.
Compiling the library and dependencies can take a while (>>15 minutes; be patient).
Once this is done, check file netcdf.log to verify that all went well.
You may want to also add its "bin" directory to your PATH environment variable by adding in your .bashrc a line of:
<syntaxhighlight lang="bash">
export PATH=$PATH:$HOME/netcdf4hdf5/bin
</syntaxhighlight>
The assumption here is that you have run the "install_netcdf4_hdf5.bash" script in a "netcdf4hdf5" subdirectory of your home directory. Adapt accordingly if not.
Check that the installation was successfully installed :-)
Again, a neat way to do that is to run and check the output of
<syntaxhighlight lang="bash">
nf-config --all
</syntaxhighlight>
03/01/2022
[[Category:HowTo]]
[[Category:WhatIs]]
69b8e04f30d24b3d0357d8a54bd231e694db7c87
305
304
2023-01-03T14:34:29Z
Lguez
4
wikitext
text/x-wiki
== the NetCDF library ==
The model reads and writes input and output files in NetCDF (Network Common Data Form) format (developed and maintained by Unidata: https://www.unidata.ucar.edu/software/netcdf/ ) and therefore a NetCDF library must be at hand when compiling and running LMDZ6.
As this library is not quite standard, chances are that you might need to install it yourself on your system (note that the [[WhatIs: The install lmdz.sh script|install_lmdz.sh]] default behavior is to download and install that library), hence this page with some indications on how to do so.
== Checking if a NetCDF library is already available ==
It is possible that the library, including its Fortran component, is already available. An easy way to check this is to see if the related utilities like '''ncdump''' are available, i.e. that
<syntaxhighlight lang="bash">
which ncdump
</syntaxhighlight>
returns a positive answer.
Note that this does not suffice as the full library, including its Fortran component, and not just the related utilities are required. A neat way to check this is to use the '''nf-config'''
<syntaxhighlight lang="bash">
nf-config --all
</syntaxhighlight>
returns something meaningful. If not, you probably need to take some action along the lines of what is indicated in the following sections.
== Various ways to install the NetCDF library ==
=== Install from the package repository of your Linux distribution ===
This is the easiest (and recommended) way. For example, if your distribution is Ubuntu or Linux Mint (and you have admin, i.e. ''sudo'' rights), open a terminal and type:
<syntaxhighlight lang="bash">
sudo apt install netcdf-bin libnetcdff-dev
</syntaxhighlight>
=== Personal installation ===
One can always download the source code and compile the NetCDF library (see https://docs.unidata.ucar.edu/netcdf-c/current/faq.html#HowdoIgetthenetCDFsoftwarepackage ). You can use the following home-made "install_netcdf4_hdf5_seq.bash" script to do so. For this, ensure that you are in your home directory and:
<syntaxhighlight lang="bash">
mkdir netcdf
cd netcdf
wget -nv --no-check-certificate http://www.lmd.jussieu.fr/~lmdz/pub/import/install_netcdf4_hdf5_seq.bash
chmod u=rwx install_netcdf4_hdf5_seq.bash
./install_netcdf4_hdf5_seq.bash > netcdf.log 2>&1
</syntaxhighlight>
Compiling the library and dependencies can take a while (>>15 minutes; be patient).
Once this is done, check file netcdf.log to verify that all went well.
You may want to also add its "bin" directory to your PATH environment variable by adding in your .bashrc a line of:
<syntaxhighlight lang="bash">
export PATH=$PATH:$HOME/netcdf/bin
</syntaxhighlight>
The assumption here is that you have run the "install_netcdf4_hdf5_seq.bash" script in a "netcdf" subdirectory of your home directory. Adapt accordingly if not.
Check that the installation was successfully installed :-)
Again, a neat way to do that is to run and check the output of
<syntaxhighlight lang="bash">
nf-config --all
</syntaxhighlight>
=== Personal installation of an advanced NetCDF4-HDF5 library with MPI enabled ===
This specific version is useful especially if running with the XIOS library.
A prerequisite is to have an MPI library installed and available.
You can use the following home-made "install_netcdf4_hdf5_seq.bash" script to do so. For this, ensure that you are in your home directory and:
<syntaxhighlight lang="bash">
mkdir netcdf4hdf5
cd netcdf4hdf5
wget -nv --no-check-certificate http://www.lmd.jussieu.fr/~lmdz/pub/import/install_netcdf4_hdf5.bash
chmod u=rwx install_netcdf4_hdf5.bash
./install_netcdf4_hdf5.bash -CC mpicc -FC mpif90 -CXX mpiCC -MPI /path/to/your/MPI/install > netcdf.log 2>&1
</syntaxhighlight>
You should of course adapt the command line, especially the ''-MPI /path/to/your/MPI/install'' part to your settings.
Compiling the library and dependencies can take a while (>>15 minutes; be patient).
Once this is done, check file netcdf.log to verify that all went well.
You may want to also add its "bin" directory to your PATH environment variable by adding in your .bashrc a line of:
<syntaxhighlight lang="bash">
export PATH=$PATH:$HOME/netcdf4hdf5/bin
</syntaxhighlight>
The assumption here is that you have run the "install_netcdf4_hdf5.bash" script in a "netcdf4hdf5" subdirectory of your home directory. Adapt accordingly if not.
Check that the installation was successfully installed :-)
Again, a neat way to do that is to run and check the output of
<syntaxhighlight lang="bash">
nf-config --all
</syntaxhighlight>
03/01/2022
[[Category:HowTo]]
[[Category:WhatIs]]
755ab39f6186560de7ed9b8b1d28fc42ee1ddefc
Building an MPI library
0
126
307
2023-01-05T10:42:47Z
Emillour
3
Page créée avec « There are a few freely available MPI libraries around; among the most widely spread are the OpenMPI and MPICH libraries == Checking if you have an Fortran enabled MPI lib... »
wikitext
text/x-wiki
There are a few freely available MPI libraries around; among the most widely spread are the OpenMPI and MPICH libraries
== Checking if you have an Fortran enabled MPI library already installed and at hand ==
This can easily be done by checking if the MPI wrapper '''mpif90''' is available, i.e. that
<syntaxhighlight lang="bash">
which mpif90
</syntaxhighlight>
returns something meaningful
== Example of installing the OpenMPI library ==
To adapt to fit your onw needs and system specificities, obviously.
In the example below the installation is done in the '''$HOME/LMDZ''' directory (for convenience this path is stored in the '''PATH_OPENMPI''' variable.
<syntaxhighlight lang="bash">
PATH_OPENMPI=$HOME/LMDZ/
mkdir -p $PATH_OPENMPI
cd $PATH_OPENMPI
wget https://www.open-mpi.org/software/ompi/v1.10/downloads/openmpi-1.10.3.tar.gz
gunzip openmpi-1.10.3.tar.gz
tar xvf openmpi-1.10.3.tar
cd openmpi-1.10.3
./configure --prefix $PATH_OPENMPI/openmpi-1.10.3
make all install
</syntaxhighlight>
To check that the install went well check that...
== Worth knowing about ==
...
03/01/2022
[[Category:HowTo]]
[[Category:WhatIs]]
054d06c78abe4fc0fe2ab27b23a7f6f7c92f9414
308
307
2023-01-05T14:33:03Z
Emillour
3
wikitext
text/x-wiki
There are a few freely available MPI libraries around; among the most widely spread are the OpenMPI and MPICH libraries
== Checking if you have an Fortran enabled MPI library already installed and at hand ==
This can easily be done by checking if the MPI wrapper '''mpif90''' is available, i.e. that
<syntaxhighlight lang="bash">
which mpif90
</syntaxhighlight>
returns something meaningful
== Example of installing the OpenMPI library ==
To adapt to fit your onw needs and system specificities, obviously.
In the example below the installation is done in the '''$HOME/LMDZ''' directory (for convenience this path is stored in the '''PATH_OPENMPI''' variable.
<syntaxhighlight lang="bash">
PATH_OPENMPI=$HOME/LMDZ/
mkdir -p $PATH_OPENMPI
cd $PATH_OPENMPI
wget https://www.open-mpi.org/software/ompi/v1.10/downloads/openmpi-1.10.3.tar.gz
gunzip openmpi-1.10.3.tar.gz
tar xvf openmpi-1.10.3.tar
cd openmpi-1.10.3
./configure --prefix $PATH_OPENMPI/openmpi-1.10.3
make all install
</syntaxhighlight>
To check that the install went well check that
<syntaxhighlight lang="bash">
$PATH_OPENMPI/openmpi-1.10.3/bin/mpif90 -V
</syntaxhighlight>
returns something meaninful
== Worth knowing about ==
...
03/01/2022
[[Category:HowTo]]
[[Category:WhatIs]]
ab26e57bfa7a81c61ad12cf62ecb2ae03840673f
309
308
2023-01-05T14:49:43Z
Emillour
3
wikitext
text/x-wiki
There are a few freely available MPI libraries around; among the most widely spread are the OpenMPI and MPICH libraries
== Checking if you have an Fortran enabled MPI library already installed and at hand ==
This can easily be done by checking if the MPI wrapper '''mpif90''' is available, i.e. that
<syntaxhighlight lang="bash">
which mpif90
</syntaxhighlight>
returns something meaningful
== using a package manager ==
If you have sudo privileges and are on an Ubuntu or Linux Mint machine you should be able to install the OpenMPI library with
<syntaxhighlight lang="bash">
sudo apt install libopenmpi-dev openmpi-bin
</syntaxhighlight>
== Example of personal installation of the the OpenMPI library ==
To adapt to fit your onw needs and system specificities, obviously.
In the example below the installation is done in the '''$HOME/LMDZ''' directory (for convenience this path is stored in the '''PATH_OPENMPI''' variable.
<syntaxhighlight lang="bash">
PATH_OPENMPI=$HOME/LMDZ/
mkdir -p $PATH_OPENMPI
cd $PATH_OPENMPI
wget https://www.open-mpi.org/software/ompi/v1.10/downloads/openmpi-1.10.3.tar.gz
gunzip openmpi-1.10.3.tar.gz
tar xvf openmpi-1.10.3.tar
cd openmpi-1.10.3
./configure --prefix $PATH_OPENMPI/openmpi-1.10.3
make all install
</syntaxhighlight>
To check that the install went well check that
<syntaxhighlight lang="bash">
$PATH_OPENMPI/openmpi-1.10.3/bin/mpif90 -V
</syntaxhighlight>
returns something meaningful
== Worth knowing about ==
...
03/01/2022
[[Category:HowTo]]
[[Category:WhatIs]]
a25e81a82198f0038abf1d27035575795c1fcb83
310
309
2023-01-05T15:23:17Z
Emillour
3
wikitext
text/x-wiki
There are a few freely available MPI libraries around; among the most widely spread are the OpenMPI and MPICH libraries
== Checking if you have an Fortran enabled MPI library already installed and at hand ==
This can easily be done by checking if the MPI wrapper '''mpif90''' is available, i.e. that
<syntaxhighlight lang="bash">
which mpif90
</syntaxhighlight>
returns something meaningful
== using a package manager ==
If you have sudo privileges and are on an Ubuntu or Linux Mint machine you should be able to install the OpenMPI library with
<syntaxhighlight lang="bash">
sudo apt install libopenmpi-dev openmpi-bin
</syntaxhighlight>
== Example of personal installation of the the OpenMPI library ==
To adapt to fit your onw needs and system specificities, obviously.
In the example below the installation is done in the '''$HOME/LMDZ''' directory (for convenience this path is stored in the '''PATH_OPENMPI''' variable.
<syntaxhighlight lang="bash">
PATH_OPENMPI=$HOME/LMDZ/
mkdir -p $PATH_OPENMPI
cd $PATH_OPENMPI
wget https://www.open-mpi.org/software/ompi/v1.10/downloads/openmpi-1.10.3.tar.gz
gunzip openmpi-1.10.3.tar.gz
tar xvf openmpi-1.10.3.tar
cd openmpi-1.10.3
./configure --prefix $PATH_OPENMPI/openmpi-1.10.3
make all install
</syntaxhighlight>
To check that the install went well check that
<syntaxhighlight lang="bash">
$PATH_OPENMPI/openmpi-1.10.3/bin/mpif90 -V
</syntaxhighlight>
returns something meaningful
== Worth knowing about ==
* '''mpif90''' is just a wrapper around a given compiler which could be gfortran, ifort, pgfortran, etc. to know more about that run
<syntaxhighlight lang="bash">
mpif90 --version
</syntaxhighlight>
* in some cases (e.g. with ifort) the Fortran wrapper is called '''mpiifort''' , not '''mpif90'''
* It is vital to use the '''mpirun''' command from the same package than the '''mpif90''' compilation wrapper use to compile. Otherwise one can get some really weird results...
03/01/2022
[[Category:HowTo]]
[[Category:WhatIs]]
a4a2b8740ba6283a2dd797b3cbe50fd5b1d95150
311
310
2023-01-05T15:35:05Z
Emillour
3
wikitext
text/x-wiki
There are a few freely available MPI libraries around; among the most widely spread are the OpenMPI https://www.open-mpi.org/ and MPICH https://www.mpich.org/ libraries
== Checking if you have an Fortran enabled MPI library already installed and at hand ==
This can easily be done by checking if the MPI wrapper '''mpif90''' is available, i.e. that
<syntaxhighlight lang="bash">
which mpif90
</syntaxhighlight>
returns something meaningful
== using a package manager ==
If you have sudo privileges and are on an Ubuntu or Linux Mint machine you should be able to install the OpenMPI library with
<syntaxhighlight lang="bash">
sudo apt install libopenmpi-dev openmpi-bin
</syntaxhighlight>
== Example of personal installation of the the OpenMPI library ==
To adapt to fit your onw needs and system specificities, obviously.
In the example below the installation is done in the '''$HOME/LMDZ''' directory (for convenience this path is stored in the '''PATH_OPENMPI''' variable.
<syntaxhighlight lang="bash">
PATH_OPENMPI=$HOME/LMDZ/
mkdir -p $PATH_OPENMPI
cd $PATH_OPENMPI
wget https://www.open-mpi.org/software/ompi/v1.10/downloads/openmpi-1.10.3.tar.gz
gunzip openmpi-1.10.3.tar.gz
tar xvf openmpi-1.10.3.tar
cd openmpi-1.10.3
./configure --prefix $PATH_OPENMPI/openmpi-1.10.3
make all install
</syntaxhighlight>
To check that the install went well check that
<syntaxhighlight lang="bash">
$PATH_OPENMPI/openmpi-1.10.3/bin/mpif90 -V
</syntaxhighlight>
returns something meaningful like
<syntaxhighlight lang="bash">
GNU Fortran (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
</syntaxhighlight>
== A few things worth knowing about ==
* '''mpif90''' is just a wrapper around a given compiler which could be gfortran, ifort, pgfortran, etc. to know more about that run
<syntaxhighlight lang="bash">
mpif90 --version
</syntaxhighlight>
* in some cases (e.g. with ifort) the Fortran wrapper is called '''mpiifort''' , not '''mpif90'''
* It is vital to use the '''mpirun''' command from the same package than the '''mpif90''' compilation wrapper use to compile. Otherwise one can get some really weird results...
05/01/2022
[[Category:HowTo]]
[[Category:WhatIs]]
1ee0bb54bea7f05622ba91ee930e81a822511384
312
311
2023-01-06T06:35:46Z
Emillour
3
wikitext
text/x-wiki
There are a few freely available MPI libraries around; among the most widely spread are the OpenMPI https://www.open-mpi.org/ and MPICH https://www.mpich.org/ libraries
== Checking if you have an Fortran enabled MPI library already installed and at hand ==
This can easily be done by checking if the MPI wrapper '''mpif90''' is available, i.e. that
<syntaxhighlight lang="bash">
which mpif90
</syntaxhighlight>
returns something meaningful
== using a package manager ==
If you have sudo privileges and are on an Ubuntu or Linux Mint machine you should be able to install the OpenMPI library with
<syntaxhighlight lang="bash">
sudo apt install libopenmpi-dev openmpi-bin
</syntaxhighlight>
== Example of personal installation of the the OpenMPI library ==
To adapt to fit your onw needs and system specificities, obviously.
In the example below the installation is done in the '''$HOME/LMDZ''' directory (for convenience this path is stored in the '''PATH_OPENMPI''' variable.
<syntaxhighlight lang="bash">
PATH_OPENMPI=$HOME/LMDZ/
mkdir -p $PATH_OPENMPI
cd $PATH_OPENMPI
wget https://www.open-mpi.org/software/ompi/v1.10/downloads/openmpi-1.10.3.tar.gz
gunzip openmpi-1.10.3.tar.gz
tar xvf openmpi-1.10.3.tar
cd openmpi-1.10.3
./configure --prefix $PATH_OPENMPI/openmpi-1.10.3
make all install
</syntaxhighlight>
To check that the install went well check that
<syntaxhighlight lang="bash">
$PATH_OPENMPI/openmpi-1.10.3/bin/mpif90 -V
</syntaxhighlight>
returns something meaningful like
<syntaxhighlight lang="bash">
GNU Fortran (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
</syntaxhighlight>
Once you have a distribution correctly installed you will need to update your environment variables '''PATH''' and '''LD_LIBRARY_PATH''' to point to the relevant locations (the '''bin''' and '''lib''' subdirectories of the distribution).
In practice this is typically done in your ''$HOME/.bash_profile'' or ''$HOME/.bashrc'' file, where for instance, if your installed the library in '''$HOME/myopenmpi''' you would add:
<syntaxhighlight lang="bash">
export PATH=$PATH:$HOME/myopenmpi/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HOME/myopenmpi/lib
</syntaxhighlight>
== A few things worth knowing about ==
* '''mpif90''' is just a wrapper around a given compiler which could be gfortran, ifort, pgfortran, etc. to know more about that run
<syntaxhighlight lang="bash">
mpif90 --version
</syntaxhighlight>
* in some cases (e.g. with ifort) the Fortran wrapper is called '''mpiifort''', not '''mpif90'''
* It is vital to use the '''mpirun''' command from the same package than the '''mpif90''' compilation wrapper used to compile the code. Otherwise one can get some really weird results...
05/01/2022
[[Category:HowTo]]
[[Category:WhatIs]]
818b0ed3fe6e8bce5fe74c8f09f7f6b810dadc9f
Some pointers about running LMDZ in parallel
0
89
313
173
2023-01-12T10:22:45Z
Emillour
3
wikitext
text/x-wiki
Some pointers and advice for those who want to run LMDZ in parallel on a Linux PC
This note is mainly oriented towards using LMDZ on a "personal" computer, i.e. as opposed to on a cluster or national center (surc as IDRIS or CCRT or CINES) where many tools and libraries are available.
The first step is of course to have the model installed on your Linux machine, which should be relatively easy using the ''install_lmdz.sh'' script launched with appropriate option, e.g.
<pre>
./install_lmdz.sh -parallel mpi_omp
</pre>
If unfortunately the script fails, you might need to make some adjustments and generate your own NetCDF or IOIPSL libraries and/or your own ''arch'' files. What follows assumes that necessary libraries have been correctly built and are available. The focus here is on generating appropriate arch.fcm files and then compiling and running the GCM.
== Compiling and running in MPI only ==
A prerequisite is (obviously) to have an MPI library at hand (e.g. MPICH, OpenMPI, etc.). Also having a BLAS library at hand, although not mandatory, is recommended.
If the ''install_lmdz.sh'' script ran fine (with the ''-parallel mpi_omp'' option, then this is clearly the case.
Assuming that ''mpif90'' points to the MPI wrapper (to gfortran) , that the MPI library is installed in ''/my/mpi/directory/lib'', that related files to include (mpi.h) are in directory ''/my/mpi/directory/include'', that the BLAS library is installed in ''/my/blas/directory/lib'', then an example of an adequate ''arch-local.fcm'' file would be:
<pre>
%COMPILER /my/mpi/directory/bin/mpif90
%LINK /my/mpi/directory/bin/mpif90
%AR ar
%MAKE make
%FPP_FLAGS -P -traditional
%FPP_DEF NC_DOUBLE BLAS SGEMV=DGEMV SGEMM=DGEMM
%BASE_FFLAGS -cpp -ffree-line-length-0 -fdefault-real-8
%PROD_FFLAGS -O3 -funroll-loops
%DEV_FFLAGS -g -O1 -Wall
%DEBUG_FFLAGS -g3 -Wall -fbounds-check -ffpe-trap=invalid,zero,overflow -O0 -fstack-protector-all -fbacktrace -finit-real=snan
%MPI_FFLAGS -fcray-pointer -I/my/mpi/directory/include
%OMP_FFLAGS
%BASE_LD -L/my/blas/directory/lib -lblas
%MPI_LD -L/my/mpi/directory/lib -lmpi
%OMP_LD
</pre>
And compiling the GCM would be done via
<pre>
makelmdz_fcm -arch local -parallel mpi ......
</pre>
To then run LMDZ on N=4 processors would require running the command:
<pre>
/my/mpi/directory/bin/mpirun -np 4 gcm_32x32x39_phylmd_para_mem.e
</pre>
Note that prior to running you might need to update your ''LD_LIBRARY_PATH'' environment variable to include the path to your MPI/NetCDF/BLAS libraries, especially if these are locate in non-standard paths. Note also that if you are using the IOIPSL library, then output files will be split into as many files as processors were used and should be recombined into a single file using the IOIPSL [[WhatIs: the ioipsl library|rebuild utility]].
== Compiling and running in OpenMP only ==
Assuming that the BLAS library is installed in ''/my/blas/directory/lib'', then an example of an adequate ''arch-local.fcm'' file would be:
<pre>
%COMPILER gfortran
%LINK gfortran
%AR ar
%MAKE make
%FPP_FLAGS -P -traditional
%FPP_DEF NC_DOUBLE BLAS SGEMV=DGEMV SGEMM=DGEMM
%BASE_FFLAGS -cpp -ffree-line-length-0 -fdefault-real-8
%PROD_FFLAGS -O3 -funroll-loops
%DEV_FFLAGS -g -O1 -Wall
%DEBUG_FFLAGS -g3 -Wall -fbounds-check -ffpe-trap=invalid,zero,overflow -O0 -fstack-protector-all -fbacktrace -finit-real=snan
%MPI_FFLAGS -fcray-pointer -I/my/mpi/directory/include
%OMP_FFLAGS -fopenmp -fcray-pointer
%BASE_LD -L/my/blas/directory/lib -lblas
%MPI_LD
%OMP_LD -fopenmp
</pre>
And compiling the GCM would be done via
<pre>
makelmdz_fcm -arch local -parallel omp ......
</pre>
To then run LMDZ using X=4 tasks would require running the commands:
<pre>
export OMP_NUM_THREADS=4
export OMP_STACKSIZE=200M
./gcm_32x32x39_phylmd_para_mem.e
</pre>
Note that to avoid memory issues (which can easily arrive in OpenMP as separate tasks need some private memory to store their variables, which is defined by the ''OMP_STACKSIZE=...'' environment variable) it is strongly recommended to have as much stack available as possible. Which in practice means setting:
<pre>
ulimit -s unlimited
</pre>
prior to running (and in practice this can be put in your .bashrc or .bash_profile file to be always set this way).
== Compiling and running in mixed MPI/OpenMP ==
All that is mentionned above about MPI and OpenMP applies.
An example of an adequate ''arch-local.fcm'' file would be:
<pre>
%COMPILER /my/mpi/directory/bin/mpif90
%LINK /my/mpi/directory/bin/mpif90
%AR ar
%MAKE make
%FPP_FLAGS -P -traditional
%FPP_DEF NC_DOUBLE BLAS SGEMV=DGEMV SGEMM=DGEMM
%BASE_FFLAGS -cpp -ffree-line-length-0 -fdefault-real-8
%PROD_FFLAGS -O3 -funroll-loops
%DEV_FFLAGS -g -O1 -Wall
%DEBUG_FFLAGS -g3 -Wall -fbounds-check -ffpe-trap=invalid,zero,overflow -O0 -fstack-protector-all -fbacktrace -finit-real=snan
%MPI_FFLAGS -fcray-pointer -I/my/mpi/directory/include
%OMP_FFLAGS -fopenmp -fcray-pointer
%BASE_LD -L/my/blas/directory/lib -lblas
%MPI_LD -L/my/mpi/directory/lib -lmpi
%OMP_LD -fopenmp
</pre>
And compiling the GCM would be done via
<pre>
makelmdz_fcm -arch local -parallel mpi_omp ......
</pre>
To then run LMDZ using N=4 MPI processes with X=2 tasks each (i.e.using N*X=8 cores overall) would require running the commands:
<pre>
export OMP_NUM_THREADS=2
export OMP_STACKSIZE=200M
/my/mpi/directory/bin/mpirun -np 4 gcm_32x32x39_phylmd_para_mem.e
</pre>
12/01/2023
[[Category:Parallel]]
de9c8395b3c0786086338baa700d09d98c821eff
Fichier:Connexion.png
6
127
314
2023-01-25T16:03:31Z
Lfairhead
1
wikitext
text/x-wiki
Connection to the trac server
a986a93708f5570cacdf402854234c9f2d4bf2b1
HowTo: Create a Trac ticket
0
128
315
2023-01-25T16:07:21Z
Lfairhead
1
Page créée avec « == HowTo: Create a Trac ticket == To create a trac ticket, first check that you are allowed to login to the trac server (so that you can actually write something) then h... »
wikitext
text/x-wiki
== HowTo: Create a Trac ticket ==
To create a trac ticket, first check that you are allowed to login to the trac server (so that you can actually write something) then head to
https://trac.lmd.jussieu.fr/LMDZ
Connect to your account, the connection link is in the red menu line on the upper left:
[[Fichier:Connexion.png|vignette]]
[[Category:HowTo]]
c3dadfe3012b8750183c8bccfc3eb262cbd7ca9e
318
315
2023-01-25T16:42:21Z
Lfairhead
1
wikitext
text/x-wiki
== HowTo: Create a Trac ticket ==
To create a trac ticket, first check that you are allowed to login to the trac server (so that you can actually write something) then head to
https://trac.lmd.jussieu.fr/LMDZ
Connect to your account, the connection link is in the red menu line on the upper left:
[[Fichier:Connexion.png|vignette|none]]
Once connected, you should see a new button appear in the main menu line 'Nouveau ticket':
[[Fichier:Nouveau ticket.png|vignette|néant]]
After clicking the 'Nouveau ticket' button, you will be taken to the following forms page
[[Fichier:Ticket.png|vignette|néant]]
which you need to fill out to create your ticket. Items to fill out are
* ''Résumé'' : a one-line description of the problem/bug/enhancement you want the ticket for
* ''Description'' : a longer description of the problem/bug/enhancement
* ''Type'' : describes the type of ticket you want to create. Possible values are
** plantage / defect
** incoherences
** vérifications
** améliorations / enhancements
** formation / documentation
* ''Priorité'' : describes the severity or priority you want to assign to your ticket. Possible values are
** blocker
** critical
** major
** minor
** trivial
* ''Composant'' : gives an indication of the LMDZ component that is involved in your report. Possible values are
** Consolidation
** Documentation
** Dynamic core
** Environnement
** I/O
** LMDZ
** Optimisation
** Parallelisation
** Terrestrial Physics
** Tracers
You can add some keywords in the 'Mots-clés' field and inform other members of the LMDZ team directly of your ticket by inserting their username in the 'Copie à' field. You can also attach some files explaining your problem to your ticket. You can finally assign your new ticket to some other member of the team by switching on the 'assign' button rather than the 'create' button and providing their username in the 'Action' grey box.
Once you've filled out all these informations, you can go ahead and click the 'Création d'un nouveau ticket' button to create you ticket and voilà !
[[Category:HowTo]]
084550f693b1a875594fc3cb0c6be9ee99aa29ea
319
318
2023-01-25T18:57:37Z
Lfairhead
1
wikitext
text/x-wiki
== HowTo: Create a Trac ticket ==
To create a trac ticket, first check that you are allowed to login to the trac server (so that you can actually write something). If you have a LMDZ svn account, you can use that account to login to the trac server. Head to
https://trac.lmd.jussieu.fr/LMDZ
Connect to your account, the connection link is in the red menu line on the upper left:
[[Fichier:Connexion.png|vignette|none]]
Once connected, you should see a new button appear in the main menu line 'Nouveau ticket':
[[Fichier:Nouveau ticket.png|vignette|néant]]
After clicking the 'Nouveau ticket' button, you will be taken to the following forms page
[[Fichier:Ticket.png|vignette|néant]]
which you need to fill out to create your ticket. Items to fill out are
* ''Résumé'' : a one-line description of the problem/bug/enhancement you want the ticket for
* ''Description'' : a longer description of the problem/bug/enhancement
* ''Type'' : describes the type of ticket you want to create. Possible values are
** plantage / defect
** incoherences
** vérifications
** améliorations / enhancements
** formation / documentation
* ''Priorité'' : describes the severity or priority you want to assign to your ticket. Possible values are
** blocker
** critical
** major
** minor
** trivial
* ''Composant'' : gives an indication of the LMDZ component that is involved in your report. Possible values are
** Consolidation
** Documentation
** Dynamic core
** Environnement
** I/O
** LMDZ
** Optimisation
** Parallelisation
** Terrestrial Physics
** Tracers
You can add some keywords in the 'Mots-clés' field and inform other members of the LMDZ team directly of your ticket by inserting their username in the 'Copie à' field. You can also attach some files explaining your problem to your ticket. You can finally assign your new ticket to some other member of the team by switching on the 'assign' button rather than the 'create' button and providing their username in the 'Action' grey box.
Once you've filled out all these informations, you can go ahead and click the 'Création d'un nouveau ticket' button to create you ticket and voilà !
[[Category:HowTo]]
d7184726c3441d76005560763fb31f64fdbe0459
Fichier:Nouveau ticket.png
6
129
316
2023-01-25T16:10:15Z
Lfairhead
1
wikitext
text/x-wiki
Le bouton pour rajouter les tickets
51d1c3aeafbb6a052f0d2c9e3f85cae4a947b7d9
Fichier:Ticket.png
6
130
317
2023-01-25T16:13:02Z
Lfairhead
1
wikitext
text/x-wiki
Description du formulaire de création d'un nouveau ticket
975547f075f20b1c9dafdd3dd65b4a2684327d84
Cosp
0
131
320
2023-01-27T15:19:52Z
Lguez
4
Page créée avec « Le répertoire cosp correspond à la version cospv1 que nous avons utilisée pour les simulations CMIP6. Le répertoire cospv2 correspond à la version récente cospv2 de... »
wikitext
text/x-wiki
Le répertoire cosp correspond à la version cospv1 que nous avons utilisée pour les simulations CMIP6.
Le répertoire cospv2 correspond à la version récente cospv2 de Cosp. La différence entre les 2 versions est la réécriture avec du fortran récent et l'ajout de nouveaux diagnostics.
Le répertoire cosp2 est une version intermédiaire avec des développement d'un doctorant de Jean-Louis qu'on voulait conserver et qui n'est pas maintenue.
2437dff65b67ed51d0d79de8734ae443263223ec
321
320
2023-01-27T15:28:25Z
Lfairhead
1
wikitext
text/x-wiki
* Le répertoire cosp correspond à la version cospv1 que nous avons utilisée pour les simulations CMIP6.
* Le répertoire cospv2 correspond à la version récente cospv2 de Cosp. La différence entre les 2 versions est la réécriture avec du fortran récent et l'ajout de nouveaux diagnostics.
* Le répertoire cosp2 est une version intermédiaire avec des développement d'un doctorant de Jean-Louis qu'on voulait conserver et qui n'est pas maintenue.
0fb04c9cb2a915ceea58f1557cb724b1784d9f9e
322
321
2023-01-27T15:30:22Z
Lfairhead
1
wikitext
text/x-wiki
A quoi correspondent les différents répertoires cosp dans le répertoire libf/phylmd?
* Le répertoire cosp correspond à la version cospv1 que nous avons utilisée pour les simulations CMIP6.
* Le répertoire cospv2 correspond à la version récente cospv2 de Cosp. La différence entre les 2 versions est la réécriture avec du fortran récent et l'ajout de nouveaux diagnostics.
* Le répertoire cosp2 est une version intermédiaire avec des développement d'un doctorant de Jean-Louis qu'on voulait conserver et qui n'est pas maintenue.
6bb6a2d53dac58132706d90f2c692a95a4e183ac
HowTo: debug the quality control
0
73
323
290
2023-02-07T14:27:39Z
Lfairhead
1
wikitext
text/x-wiki
As explained on the page [https://lmdz.lmd.jussieu.fr/le-coin-des-developpeurs/controle-qualite Contrôle qualité], a number of quality control checks of the code are run every night to ensure that nothing was broken by the most recent commits to the svn depository (note that only the trunk version of the code is tested by this procedure).
This note explains what to do if those regular tests reveal that the code is broken.
The checks are launched by the script [https://www.lmd.jussieu.fr/~lmdz/Distrib/creation_modipsl.sh creation_modipsl.sh] which prepares the distribution version of the code and then lauches [https://www.lmd.jussieu.fr/~lmdz/Distrib/check_version.sh check_version.sh], which actually launches the quality checks. The results of the tests are synthesized in one line and recorded in the file [https://web.lmd.jussieu.fr/~lmdz/pub/src_archives/Readme Readme]. Each line of this file (besides the comments) gives the version of the code being tested, its corresponding svn revision number and the results of the different checks (as explained in the file and the page [https://lmdz.lmd.jussieu.fr/le-coin-des-developpeurs/controle-qualite Contrôle qualité]).
=== How to debug a failed quality check ===
Once a failed quality check is established, one should look in the file [https://www.lmd.jussieu.fr/~lmdz/pub/LISMOI.trunk LISMOI.trunk] to find out which version of the code caused a problem (for example 20211105.trunk). One can then find the output of the quality control check in the directory:
lmdz-cq:/tmp/lmdz/LMDZ[version_number]
with the actual output file of the check_version.sh script in
lmdz-cq:~lmdz/WWW/Distrib/WORK/check.out.[version_number]
('''''lmdz-cq:/tmp/lmdz/LMDZ20211105.trunk''''' and '''''lmdz-cq:~lmdz/WWW/Distrib/WORK/check.out.20211105.trunk''''' respectively in our example). This output file is also [https://lmdz.lmd.jussieu.fr/Distrib/WORK accessible on internet].
One can then go through the script [https://www.lmd.jussieu.fr/~lmdz/Distrib/check_version.sh check_version.sh] comparing with the different output to find out what went wrong. Tests of correction can actually be done in the
lmdz-cq:/tmp/lmdz/LMDZ[version_number]
directory.
[[Category:HowTo]]
[[Category:ExpertDev]]
0adf57de53bbce173fc63c6720facb8c6e602b56
415
323
2023-07-12T10:56:40Z
Lfairhead
1
wikitext
text/x-wiki
As explained on the page [https://lmdz.lmd.jussieu.fr/le-coin-des-developpeurs/controle-qualite Contrôle qualité], a number of quality control checks of the code are run every night to ensure that nothing was broken by the most recent commits to the svn depository (note that only the trunk version of the code is tested by this procedure).
This note explains what to do if those regular tests reveal that the code is broken.
The checks are launched by the script [https://www.lmd.jussieu.fr/~lmdz/Distrib/creation_modipsl.sh creation_modipsl.sh] which prepares the distribution version of the code and then lauches [https://www.lmd.jussieu.fr/~lmdz/Distrib/check_version.sh check_version.sh], which actually launches the quality checks. The results of the tests are synthesized in one line and recorded in the file [https://web.lmd.jussieu.fr/~lmdz/pub/src_archives/Readme Readme]. Each line of this file (besides the comments) gives the version of the code being tested, its corresponding svn revision number and the results of the different checks (as explained in the file and the page [https://lmdz.lmd.jussieu.fr/le-coin-des-developpeurs/controle-qualite Contrôle qualité]).
=== How to debug a failed quality check ===
Once a failed quality check is established, one should look in the file [https://www.lmd.jussieu.fr/~lmdz/pub/LISMOI.trunk LISMOI.trunk] to find out which version of the code caused a problem (for example 20211105.trunk). One can then find the output of the quality control check in the directory:
lmdz-cq:/home/lmdz/tmp/LMDZ[version_number]
with the actual output file of the check_version.sh script in
lmdz-cq:~lmdz/WWW/Distrib/WORK/check.out.[version_number]
('''''lmdz-cq:/tmp/lmdz/LMDZ20211105.trunk''''' and '''''lmdz-cq:~lmdz/WWW/Distrib/WORK/check.out.20211105.trunk''''' respectively in our example). This output file is also [https://lmdz.lmd.jussieu.fr/Distrib/WORK accessible on internet].
One can then go through the script [https://www.lmd.jussieu.fr/~lmdz/Distrib/check_version.sh check_version.sh] comparing with the different output to find out what went wrong. Tests of correction can actually be done in the
lmdz-cq:/home/lmdz/tmp/LMDZ[version_number]
directory.
[[Category:HowTo]]
[[Category:ExpertDev]]
f889462ec4f548bfe8db6ae28404c2496fb45b11
416
415
2023-07-12T10:58:28Z
Lfairhead
1
wikitext
text/x-wiki
As explained on the page [https://lmdz.lmd.jussieu.fr/le-coin-des-developpeurs/controle-qualite Contrôle qualité], a number of quality control checks of the code are run every night to ensure that nothing was broken by the most recent commits to the svn depository (note that only the trunk version of the code is tested by this procedure).
This note explains what to do if those regular tests reveal that the code is broken.
The checks are launched by the script [https://web.lmd.jussieu.fr/~lmdz/Distrib/creation_modipsl.sh creation_modipsl.sh] which prepares the distribution version of the code and then lauches [https://web.lmd.jussieu.fr/~lmdz/Distrib/check_version.sh check_version.sh], which actually launches the quality checks. The results of the tests are synthesized in one line and recorded in the file [https://web.lmd.jussieu.fr/~lmdz/pub/src_archives/Readme Readme]. Each line of this file (besides the comments) gives the version of the code being tested, its corresponding svn revision number and the results of the different checks (as explained in the file and the page [https://lmdz.lmd.jussieu.fr/le-coin-des-developpeurs/controle-qualite Contrôle qualité]).
=== How to debug a failed quality check ===
Once a failed quality check is established, one should look in the file [https://web.lmd.jussieu.fr/~lmdz/pub/LISMOI.trunk LISMOI.trunk] to find out which version of the code caused a problem (for example 20211105.trunk). One can then find the output of the quality control check in the directory:
lmdz-cq:/home/lmdz/tmp/LMDZ[version_number]
with the actual output file of the check_version.sh script in
lmdz-cq:~lmdz/WWW/Distrib/WORK/check.out.[version_number]
('''''lmdz-cq:/tmp/lmdz/LMDZ20211105.trunk''''' and '''''lmdz-cq:~lmdz/WWW/Distrib/WORK/check.out.20211105.trunk''''' respectively in our example). This output file is also [https://lmdz.lmd.jussieu.fr/Distrib/WORK accessible on internet].
One can then go through the script [https://www.lmd.jussieu.fr/~lmdz/Distrib/check_version.sh check_version.sh] comparing with the different output to find out what went wrong. Tests of correction can actually be done in the
lmdz-cq:/home/lmdz/tmp/LMDZ[version_number]
directory.
[[Category:HowTo]]
[[Category:ExpertDev]]
e4dd2c5147269afdcfe572b833c7ee4e39e597af
Radiative transfer schemes
0
117
324
269
2023-03-06T17:23:40Z
Lguez
4
wikitext
text/x-wiki
There are different radiative schemes that can be used in LMDZ:
* the "legacy" (oldest) radiative scheme: always available. May be selected using the '''iflag_rrtm=0''' option in physiq.def. Note that this schemes also requires using 2 bands in the SW (Short Wave, i.e. visible wavelengths), i.e. setting '''NSW=2''' in physiq.def
* RRTM, selected with '''iflag_rrtm=1''' (and requiring that '''NSW=6'''), which is available if the GCM has been compiled with the '''-rad rrtm''' option (see [[WhatIs: The makelmdz fcm script]]).
* ECRAD (implementation is ongoing at the time of writing this) , selected with '''iflag_rrtm=2''', which is available if the GCM has been compiled with the '''-rad ecrad''' option. Three sub-options:
** McICA : Monte Carlo Independent Column Approximation. Assez rapide, comme si on faisait des sondages, on tire une dizaine de sous-colonnes.
** triple cloud : trois colonnes par maille : ciel clair, nuageux compact, nuageux intermédiraire. Le plus proche de RRTM.
** triple cloud avec Spartacus : effet 3D des nuages, multiplie par 5 le temps d'exécution du rayonnement.
f3122a9348146d0c9f89df9dd74b23b0c2e1d8d8
382
324
2023-04-03T12:31:09Z
Lguez
4
wikitext
text/x-wiki
There are different radiative schemes that can be used in LMDZ:
* the "legacy" (oldest) radiative scheme: always available. May be selected using the '''iflag_rrtm=0''' option in physiq.def. Note that this schemes also requires using 2 bands in the SW (Short Wave, i.e. visible wavelengths), i.e. setting '''NSW=2''' in physiq.def
* RRTM, selected with '''iflag_rrtm=1''' (and requiring that '''NSW=6'''), which is available if the GCM has been compiled with the '''-rad rrtm''' option (see [[WhatIs: The makelmdz fcm script]]).
* ECRAD (implementation is ongoing at the time of writing this) , selected with '''iflag_rrtm=2''', which is available if the GCM has been compiled with the '''-rad ecrad''' option.
ECRad has three sub-options for the treatment of clouds:
* McICA : Monte Carlo Independent Column Approximation. Assez rapide, comme si on faisait des sondages, on tire une dizaine de sous-colonnes.
* triple cloud : trois colonnes par maille : ciel clair, nuageux compact, nuageux intermédiraire. Le plus proche de RRTM.
* triple cloud avec Spartacus : effet 3D des nuages, multiplie par 5 le temps d'exécution du rayonnement.
ECRad also has two sub-options for the treatment of the gas phase:
* RRTMG
* ECCKD
45d20ac9585fc6473a91242d880aa804ea438f06
387
382
2023-04-24T11:50:21Z
Lguez
4
wikitext
text/x-wiki
There are different radiative schemes that can be used in LMDZ:
* the "legacy" (oldest) radiative scheme: available regardless of the makelmdz options used. May be selected using the '''iflag_rrtm=0''' option in physiq.def. Note that this schemes also requires using 2 bands in the SW (Short Wave, i.e. visible wavelengths), i.e. setting '''NSW=2''' in physiq.def
* RRTM, selected with '''iflag_rrtm=1''' (and requiring that '''NSW=6'''), which is available if the GCM has been compiled with the '''-rad rrtm''' option (see [[WhatIs: The makelmdz fcm script]]).
* ECRAD (implementation is ongoing at the time of writing this) , selected with '''iflag_rrtm=2''', which is available if the GCM has been compiled with the '''-rad ecrad''' option.
ECRad has three sub-options for the treatment of clouds:
* McICA : Monte Carlo Independent Column Approximation. Assez rapide, comme si on faisait des sondages, on tire une dizaine de sous-colonnes.
* triple cloud : trois colonnes par maille : ciel clair, nuageux compact, nuageux intermédiraire. Le plus proche de RRTM.
* triple cloud avec Spartacus : effet 3D des nuages, multiplie par 5 le temps d'exécution du rayonnement.
ECRad also has two sub-options for the treatment of the gas phase:
* RRTMG
* ECCKD
96df22cd7c56c5112b2483651a9cc03b53f88a14
388
387
2023-04-24T11:51:53Z
Lguez
4
wikitext
text/x-wiki
There are different radiative schemes that can be used in LMDZ:
* the "legacy" (oldest) radiative scheme: available regardless of the makelmdz options used. May be selected using the '''iflag_rrtm=0''' option in physiq.def. Note that this schemes also requires using 2 bands in the SW (Short Wave, i.e. visible wavelengths), i.e. setting '''NSW=2''' in physiq.def
* RRTM, selected with '''iflag_rrtm=1''' (and requiring that '''NSW=6'''), which is available if makelmdz has been run with the '''-rad rrtm''' option (see [[WhatIs: The makelmdz fcm script]]).
* ECRAD (implementation is ongoing at the time of writing this) , selected with '''iflag_rrtm=2''', which is available if makelmdz has been run with the '''-rad ecrad''' option.
ECRad has three sub-options for the treatment of clouds:
* McICA : Monte Carlo Independent Column Approximation. Assez rapide, comme si on faisait des sondages, on tire une dizaine de sous-colonnes.
* triple cloud : trois colonnes par maille : ciel clair, nuageux compact, nuageux intermédiraire. Le plus proche de RRTM.
* triple cloud avec Spartacus : effet 3D des nuages, multiplie par 5 le temps d'exécution du rayonnement.
ECRad also has two sub-options for the treatment of the gas phase:
* RRTMG
* ECCKD
4c61da349d81a0dd4904f576970892d3ff52d312
419
388
2023-09-28T14:26:08Z
Lguez
4
wikitext
text/x-wiki
There are different radiative schemes that can be used in LMDZ:
* the "legacy" (oldest) radiative scheme: available regardless of the makelmdz options used. May be selected using the '''iflag_rrtm=0''' option in physiq.def. Note that this schemes also requires using 2 bands in the SW (Short Wave, i.e. visible wavelengths), i.e. setting '''NSW=2''' in physiq.def
* RRTM, selected with '''iflag_rrtm=1''' (and requiring that '''NSW=6'''), which is available if makelmdz has been run with the '''-rad rrtm''' option (see [[WhatIs: The makelmdz fcm script]]).
* ECRAD (implementation is ongoing at the time of writing this) , selected with '''iflag_rrtm=2''', which is available if makelmdz has been run with the '''-rad ecrad''' option.
ECRad has three sub-options for the treatment of clouds:
* McICA : Monte Carlo Independent Column Approximation. Assez rapide, comme si on faisait des sondages, on tire une dizaine de sous-colonnes.
* Tripleclouds : trois colonnes par maille : ciel clair, nuageux compact, nuageux intermédiaire. Le plus proche de RRTM.
* Tripleclouds avec Spartacus : effet 3D des nuages, multiplie par 5 le temps d'exécution du rayonnement.
ECRad also has two sub-options for the treatment of the gas phase:
* RRTMG (Rapid Radiative Transfer Model for GCMs)
* ECCKD (ECMWF correlated k-distribution scheme)
321fd99537724b6889fca37b91292f544975f50a
420
419
2023-10-16T14:18:21Z
Lguez
4
wikitext
text/x-wiki
There are different radiative schemes that can be used in LMDZ:
* the "legacy" (oldest) radiative scheme: available regardless of the makelmdz options used. May be selected using the '''iflag_rrtm=0''' option in physiq.def. Note that this schemes also requires using 2 bands in the SW (Short Wave, i.e. visible wavelengths), i.e. setting '''NSW=2''' in physiq.def
* RRTM, selected with '''iflag_rrtm=1''' (and requiring that '''NSW=6'''), which is available if makelmdz has been run with the '''-rad rrtm''' option (see [[WhatIs: The makelmdz fcm script]]).
* ECRAD (implementation is ongoing at the time of writing this) , selected with '''iflag_rrtm=2''', which is available if makelmdz has been run with the '''-rad ecrad''' option.
ECRad has three sub-options for the treatment of clouds:
* McICA : Monte Carlo Independent Column Approximation. Assez rapide, comme si on faisait des sondages, on tire une dizaine de sous-colonnes.
* Tripleclouds : trois colonnes par maille : ciel clair, nuageux compact, nuageux intermédiaire. Le plus proche de RRTM.
* Tripleclouds avec Spartacus : effet 3D des nuages, multiplie par 5 le temps d'exécution du rayonnement.
ECRad also has two sub-options for the treatment of the gas phase:
* RRTMG (Rapid Radiative Transfer Model for GCMs). 16 longwave bands and 14 shortwave bands.
* ECCKD (ECMWF correlated k-distribution scheme)
e38373dafc1ae034a753399ba9743baa2b24e2f0
421
420
2023-10-17T03:41:45Z
Lguez
4
wikitext
text/x-wiki
There are different radiative schemes that can be used in LMDZ:
* The "legacy" (oldest) radiative scheme is available regardless of the makelmdz options used. May be selected using the '''iflag_rrtm=0''' option in physiq.def. Note that this schemes also requires using 2 bands in the SW (Short Wave, i.e. visible wavelengths), i.e. setting '''NSW=2''' in physiq.def. This is the radiative code that was used in LMDZ4. It was written by Foucart and Morcrette at ECMWF. The description of the solar part of the spectrum, in particular, is not satisfying.
* RRTM, selected with '''iflag_rrtm=1''' (and requiring that '''NSW=6'''), which is available if makelmdz has been run with the '''-rad rrtm''' option (see [[WhatIs: The makelmdz fcm script]]).
* ECRAD (implementation is ongoing at the time of writing this) , selected with '''iflag_rrtm=2''', which is available if makelmdz has been run with the '''-rad ecrad''' option.
ECRad has three sub-options for the treatment of clouds:
* McICA : Monte Carlo Independent Column Approximation. Assez rapide, comme si on faisait des sondages, on tire une dizaine de sous-colonnes.
* Tripleclouds : trois colonnes par maille : ciel clair, nuageux compact, nuageux intermédiaire. Le plus proche de RRTM.
* Tripleclouds avec Spartacus : effet 3D des nuages, multiplie par 5 le temps d'exécution du rayonnement.
ECRad also has two sub-options for the treatment of the gas phase:
* RRTMG (Rapid Radiative Transfer Model for GCMs). 16 longwave bands and 14 shortwave bands.
* ECCKD (ECMWF correlated k-distribution scheme)
629c781f7c69ec2319aa67e39c3558b0c1e5447d
Some pointers about standalone installation of LMDZ
0
121
325
306
2023-03-10T08:22:18Z
Emillour
3
wikitext
text/x-wiki
This page is mostly for "do-it-yourself" people interested in installing LMDZ6
== Prerequisites ==
In the most minimal case, where one would only run the serial version of the GCM, then the prerequisites are:
# Have a Fortran compiler at hand
# Have a NetCDF library (compiled with the same compiler) available (see [[The netCDF library|this page]] for more about installing NetCDF)
# Have the IOIPSL library available (see [[Some pointers about standalone installation of the IOIPSL library|this page]] for more about installing IOIPSL)
In a more realistic case, you'll probably want to run the parallel version of the GCM, most likely with XIOS; The prerequisites are then:
# Have a Fortran-enabled MPI library at hand (see [[Building an MPI library|this page]] for more about installing MPI)
# A NetCDF4-HDF5 library, preferably compiled with MPI enabled
# Have the IOIPSL library available
# Have the XIOS library available (see [[Some pointers about standalone installation of the XIOS library|this page]] for more about installing XIOS)
== Downloading LMDZ6 source code ==
This is easily done using svn (subversion). To download the latest version from the trunk as an "LMDZ" directory:
<syntaxhighlight lang=bash>
svn checkout http://svn.lmd.jussieu.fr/LMDZ/LMDZ6/trunk LMDZ
</syntaxhighlight>
Note that the recommended way to proceed is to have all models and libraries at the same level in a master directory, so a working example would be where the master directory contents would be:
<pre>
IOIPSL LMDZ XIOS
</pre>
To compile LMDZ one would then proceed to the LMDZ subdirectory, make some adequate [[WhatIs: The target architecture ("arch") files|architecture files]] (if needed) and use the [[WhatIs: The makelmdz fcm script|makelmdz_fcm.sh]] script
10/03/2023
[[Category:HowTo]]
3071ee5634656ae29430b00625e81197e33a3d9e
383
325
2023-04-24T07:14:11Z
Emillour
3
wikitext
text/x-wiki
This page is mostly for "do-it-yourself" people interested in installing LMDZ6
== Prerequisites ==
In the most minimal case, where one would only run the serial version of the GCM, then the prerequisites are:
# Have a Fortran compiler at hand
# Have a NetCDF library (compiled with the same compiler) available (see [[The netCDF library|this page]] for more about installing NetCDF)
# Have a companion NetCDF95 library (compiled with the same compiler) available (see [[The netCDF95 library|this page]] for more about installing it)
# Have the IOIPSL library available (see [[Some pointers about standalone installation of the IOIPSL library|this page]] for more about installing IOIPSL)
In a more realistic case, you'll probably want to run the parallel version of the GCM, most likely with XIOS; The prerequisites are then:
# Have a Fortran-enabled MPI library at hand (see [[Building an MPI library|this page]] for more about installing MPI)
# A NetCDF4-HDF5 library, preferably compiled with MPI enabled
# Have the IOIPSL library available
# Have the XIOS library available (see [[Some pointers about standalone installation of the XIOS library|this page]] for more about installing XIOS)
== Downloading LMDZ6 source code ==
This is easily done using svn (subversion). To download the latest version from the trunk as an "LMDZ" directory:
<syntaxhighlight lang=bash>
svn checkout http://svn.lmd.jussieu.fr/LMDZ/LMDZ6/trunk LMDZ
</syntaxhighlight>
Note that the recommended way to proceed is to have all models and libraries at the same level in a master directory, so a working example would be where the master directory contents would be:
<pre>
IOIPSL LMDZ XIOS
</pre>
To compile LMDZ one would then proceed to the LMDZ subdirectory, make some adequate [[WhatIs: The target architecture ("arch") files|architecture files]] (if needed) and use the [[WhatIs: The makelmdz fcm script|makelmdz_fcm.sh]] script
10/03/2023
[[Category:HowTo]]
9734d37e3da3049ebe47803ca2c733e88735fa39
385
383
2023-04-24T10:13:50Z
Emillour
3
wikitext
text/x-wiki
This page is mostly for "do-it-yourself" people interested in installing LMDZ6
== Prerequisites ==
In the most minimal case, where one would only run the serial version of the GCM, then the prerequisites are:
# Have a Fortran compiler at hand
# Have a NetCDF library (compiled with the same compiler) available (see [[The netCDF library|this page]] for more about installing NetCDF),
as well as the companion NetCDF95 library (compiled with the same compiler) available (see [[The netCDF95 library|this page]] for more about installing it)
# Have the IOIPSL library available (see [[Some pointers about standalone installation of the IOIPSL library|this page]] for more about installing IOIPSL)
In a more realistic case, you'll probably want to run the parallel version of the GCM, most likely with XIOS; The prerequisites are then:
# Have a Fortran-enabled MPI library at hand (see [[Building an MPI library|this page]] for more about installing MPI)
# A NetCDF4-HDF5 library, preferably compiled with MPI enabled
# Have the IOIPSL library available
# Have the XIOS library available (see [[Some pointers about standalone installation of the XIOS library|this page]] for more about installing XIOS)
== Downloading LMDZ6 source code ==
This is easily done using svn (subversion). To download the latest version from the trunk as an "LMDZ" directory:
<syntaxhighlight lang=bash>
svn checkout http://svn.lmd.jussieu.fr/LMDZ/LMDZ6/trunk LMDZ
</syntaxhighlight>
Note that the recommended way to proceed is to have all models and libraries at the same level in a master directory, so a working example would be where the master directory contents would be:
<pre>
IOIPSL LMDZ XIOS
</pre>
To compile LMDZ one would then proceed to the LMDZ subdirectory, make some adequate [[WhatIs: The target architecture ("arch") files|architecture files]] (if needed) and use the [[WhatIs: The makelmdz fcm script|makelmdz_fcm.sh]] script
10/03/2023
[[Category:HowTo]]
1010d60a751afbcc00b2200fd9b3e491e1a5fa31
423
385
2023-11-21T10:39:06Z
Emillour
3
wikitext
text/x-wiki
This page is mostly for "do-it-yourself" people interested in installing LMDZ6
== Prerequisites ==
In the most minimal case, where one would only run the serial version of the GCM, then the prerequisites are:
# Have a Fortran compiler at hand
# Have a NetCDF library (compiled with the same compiler) available (see [[The netCDF library|this page]] for more about installing NetCDF),
as well as the companion NetCDF95 library (compiled with the same compiler) available (see [[The netCDF95 library|this page]] for more about installing it)
# Have the IOIPSL library available (see [[Some pointers about standalone installation of the IOIPSL library|this page]] for more about installing IOIPSL)
In a more realistic case, you'll probably want to run the parallel version of the GCM, most likely with XIOS; The prerequisites are then:
# Have a Fortran-enabled MPI library at hand (see [[Building an MPI library|this page]] for more about installing MPI)
# A NetCDF4-HDF5 library, preferably compiled with MPI enabled
# Have the IOIPSL library available (see [[Some pointers about standalone installation of the IOIPSL library|this page]] for more about installing IOIPSL)
# Have the XIOS library available (see [[Some pointers about standalone installation of the XIOS library|this page]] for more about installing XIOS)
== Downloading LMDZ6 source code ==
This is easily done using svn (subversion). To download the latest version from the trunk as an "LMDZ" directory:
<syntaxhighlight lang=bash>
svn checkout http://svn.lmd.jussieu.fr/LMDZ/LMDZ6/trunk LMDZ
</syntaxhighlight>
Note that the recommended way to proceed is to have all models and libraries at the same level in a master directory, so a working example would be where the master directory contents would be:
<pre>
IOIPSL LMDZ XIOS
</pre>
To compile LMDZ one would then proceed to the LMDZ subdirectory, make some adequate [[WhatIs: The target architecture ("arch") files|architecture files]] (if needed) and use the [[WhatIs: The makelmdz fcm script|makelmdz_fcm.sh]] script
21/11/2023
[[Category:HowTo]]
82154c9b22c30efd98f0ad1b95b96bf10295ed81
The netCDF95 library
0
188
384
2023-04-24T07:27:12Z
Emillour
3
Page créée avec « == The NetCDF95 library == This is essentially a wrapper on top of the "regular" [[The netCDF library|NetCDF library]]. Added, and thus required, since revision 4500 (roug... »
wikitext
text/x-wiki
== The NetCDF95 library ==
This is essentially a wrapper on top of the "regular" [[The netCDF library|NetCDF library]].
Added, and thus required, since revision 4500 (roughly speaking) of the code.
It is freely available from https://lguez.github.io/NetCDF95/
Along with installation instructions: https://lguez.github.io/NetCDF95/installation/
[[Category:WhatIs]]
1fbc4dea15682141878e47051ee2ffd3041eb168
386
384
2023-04-24T10:15:51Z
Emillour
3
wikitext
text/x-wiki
== The NetCDF95 library ==
This is essentially a wrapper on top of the "regular" [[The netCDF library|NetCDF library]].
Added, and thus required, since April 2023 (revision 4500, roughly speaking, of the code).
It is freely available from https://lguez.github.io/NetCDF95/
Along with installation instructions: https://lguez.github.io/NetCDF95/installation/
[[Category:WhatIs]]
c5bac1c773c8b0a0abc7913d5e8300a69fd6a469
407
386
2023-05-16T13:09:58Z
Lguez
4
wikitext
text/x-wiki
== The NetCDF95 library ==
This is essentially a wrapper on top of the "regular" [[The netCDF library|NetCDF library]].
Added, and thus required, since April 2023 (revision 4489 of LMDZ).
It is freely available from https://lguez.github.io/NetCDF95/
Along with installation instructions: https://lguez.github.io/NetCDF95/installation/
[[Category:WhatIs]]
9658d766917f3b62dd4aa7782b81298f1cb19b4a
Utilisateur:Eileen68U722
2
189
389
2023-04-27T12:16:32Z
Eileen68U722
56
Page créée avec « I'm Eileen and I live in a seaside city in northern United States, Golden. I'm 39 and I'm will soon finish my study at Continuing Education and Summer Sessions.<br><br>my... »
wikitext
text/x-wiki
I'm Eileen and I live in a seaside city in northern United States, Golden. I'm 39 and I'm will soon finish my study at Continuing Education and Summer Sessions.<br><br>my blog; [https://www.euro247-ko.com 유로247주소]
6eaa832b1c58ec5cc3729e6d75e54602fbd0acc8
HowTo: create mass flux files
0
190
390
2023-04-27T13:01:19Z
Acozic
54
Page créée avec « = How to : create mass flux files for inversion models = The lmdz model allows to output mass flux files that can be used as inversion model forcing files. This option... »
wikitext
text/x-wiki
= How to : create mass flux files for inversion models =
The lmdz model allows to output mass flux files that can be used as inversion model forcing files. This option is drive by the parameter <code>offline</code>
== option offline in LMDZ ==
To use this option you need :
* to put parameter <code>offline</code> to yes
* add the reference to <code><file_definition src="./file_def_phystoke_lmdz.xml"/></code> in <code>context_lmdz.xml</code>
* choose the output storage frequency with parameter <code>offline_time</code>. For example, for a storage all the 3hours (1day/8) we will choose <code>offline_time=8</code>
* if you are running with modipsl, modify lmdz.card to save mass flux files :
[OutputText]
List= (.... , wg.nc, tetag.nc, phig.nc, pbarvg.nc, pbarug.nc, masseg.nc)
[OutputFiles]
List= (.... ), \
(phystoke.nc, ${R_OUT_ATM_O_M}/${PREFIX}_1M_phystoke.nc, NONE)
* if you are not running with modipsl, save the output files : '''wg.nc''', '''tetag.nc''', '''phig.nc''', '''pbarvg.nc''', '''pbarug.nc''', '''masseg.nc''' and '''phystoke.nc'''
== Variables descriptions ==
phiss.standard_name='surface geopotentiel'
levs.standard_name='Model Level Number'
upwds.standard_name='KE sat. up. mass flux'
dnwds.standard_name='KE sat. down. mass flux'
fmths.standard_name='Mass flux thermals'
enths.standard_name='Ent therm.'
fmths.units='kg m2 s-1'
enths.units='kg m2 s-1'
upwds.units='kg m2 s-1'
dnwds.units='kg m2 s-1'
ts.standard_name='t'
das.standard_name='adiabatic ascent'
phis.standard_name='geopotentiel instantane'
phiss.standard_name='Surface Geopotential Height'
aires.standard_name='Grid area'
masses.standard_name='Mass'
levs.standard_name='Model Level Number'
phis.standard_name='geopotentiel instantane'
pbarus.standard_name='flx de masse zonal'
ws.standard_name='flx de masse vert'
tetas.standard_name='temperature potentielle'
pbarus.units = 'kg m2/s'
ws.units = 'kg m2/s'
tetas.units = '-'
phis.units = '-'
masses.units='kg'
09bbb476af62496068eb057bab11718d631598f4
391
390
2023-04-27T13:04:01Z
Acozic
54
wikitext
text/x-wiki
= How to : create mass flux files for inversion models =
The lmdz model allows to output mass flux files that can be used as inversion model forcing files. This option is drive by the parameter <code>offline</code>
Note : Actually, this option is not working with XIOS in the dynamic
== option offline in LMDZ ==
To use this option you need :
* to put parameter <code>offline</code> to yes
* add the reference to <code><file_definition src="./file_def_phystoke_lmdz.xml"/></code> in <code>context_lmdz.xml</code>
* choose the output storage frequency with parameter <code>offline_time</code>. For example, for a storage all the 3hours (1day/8) we will choose <code>offline_time=8</code>
* if you are running with modipsl, modify lmdz.card to save mass flux files :
[OutputText]
List= (.... , wg.nc, tetag.nc, phig.nc, pbarvg.nc, pbarug.nc, masseg.nc)
[OutputFiles]
List= (.... ), \
(phystoke.nc, ${R_OUT_ATM_O_M}/${PREFIX}_1M_phystoke.nc, NONE)
* if you are not running with modipsl, save the output files : '''wg.nc''', '''tetag.nc''', '''phig.nc''', '''pbarvg.nc''', '''pbarug.nc''', '''masseg.nc''' and '''phystoke.nc'''
== Variables descriptions ==
phiss.standard_name='surface geopotentiel'
levs.standard_name='Model Level Number'
upwds.standard_name='KE sat. up. mass flux'
dnwds.standard_name='KE sat. down. mass flux'
fmths.standard_name='Mass flux thermals'
enths.standard_name='Ent therm.'
fmths.units='kg m2 s-1'
enths.units='kg m2 s-1'
upwds.units='kg m2 s-1'
dnwds.units='kg m2 s-1'
ts.standard_name='t'
das.standard_name='adiabatic ascent'
phis.standard_name='geopotentiel instantane'
phiss.standard_name='Surface Geopotential Height'
aires.standard_name='Grid area'
masses.standard_name='Mass'
levs.standard_name='Model Level Number'
phis.standard_name='geopotentiel instantane'
pbarus.standard_name='flx de masse zonal'
ws.standard_name='flx de masse vert'
tetas.standard_name='temperature potentielle'
pbarus.units = 'kg m2/s'
ws.units = 'kg m2/s'
tetas.units = '-'
phis.units = '-'
masses.units='kg'
4d0357dcdaabf93dcf8be1eb03963506106bdcae
392
391
2023-04-27T13:05:06Z
Acozic
54
wikitext
text/x-wiki
= How to : create mass flux files for inversion models =
The lmdz model allows to output mass flux files that can be used as inversion model forcing files. This option is drive by the parameter <code>offline</code>
Note : Actually, this option is not working with XIOS in the dynamic
== option offline in LMDZ ==
To use this option you need :
* to put parameter <code>offline</code> to yes
* add the reference to <code><file_definition src="./file_def_phystoke_lmdz.xml"/></code> in <code>context_lmdz.xml</code>
* choose the output storage frequency with parameter <code>offline_time</code>. For example, for a storage all the 3hours (1day/8) we will choose <code>offline_time=8</code>
* if you are running with modipsl, modify lmdz.card to save mass flux files :
[OutputText]
List= (.... , wg.nc, tetag.nc, phig.nc, pbarvg.nc, pbarug.nc, masseg.nc)
[OutputFiles]
List= (.... ), \
(phystoke.nc, ${R_OUT_ATM_O_M}/${PREFIX}_1M_phystoke.nc, NONE)
* if you are not running with modipsl, save the output files : '''wg.nc''', '''tetag.nc''', '''phig.nc''', '''pbarvg.nc''', '''pbarug.nc''', '''masseg.nc''' and '''phystoke.nc'''
== Variables descriptions ==
phiss.standard_name='surface geopotentiel'
levs.standard_name='Model Level Number'
upwds.standard_name='KE sat. up. mass flux'
dnwds.standard_name='KE sat. down. mass flux'
fmths.standard_name='Mass flux thermals'
enths.standard_name='Ent therm.'
fmths.units='kg m2 s-1'
enths.units='kg m2 s-1'
upwds.units='kg m2 s-1'
dnwds.units='kg m2 s-1'
ts.standard_name='t'
das.standard_name='adiabatic ascent'
phis.standard_name='geopotentiel instantane'
phiss.standard_name='Surface Geopotential Height'
aires.standard_name='Grid area'
masses.standard_name='Mass'
levs.standard_name='Model Level Number'
phis.standard_name='geopotentiel instantane'
pbarus.standard_name='flx de masse zonal'
ws.standard_name='flx de masse vert'
tetas.standard_name='temperature potentielle'
pbarus.units = 'kg m2/s'
ws.units = 'kg m2/s'
tetas.units = '-'
phis.units = '-'
masses.units='kg'
[[Category:HowTo]]
bd2668e84f195545220e42ffea9017661ed2578f
393
392
2023-04-27T13:42:18Z
Acozic
54
wikitext
text/x-wiki
= How to : create mass flux files for inversion models =
The lmdz model allows to output mass flux files that can be used as inversion model forcing files. This option is drive by the parameter <code>offline</code>
Note 1: commit to come (very soon)
Note 2: Actually, this option is not working with XIOS in the dynamic
== option offline in LMDZ ==
To use this option you need :
* to put parameter <code>offline</code> to yes
* add the reference to <code><file_definition src="./file_def_phystoke_lmdz.xml"/></code> in <code>context_lmdz.xml</code>
* choose the output storage frequency with parameter <code>offline_time</code>. For example, for a storage all the 3hours (1day/8) we will choose <code>offline_time=8</code>
* if you are running with modipsl, modify lmdz.card to save mass flux files :
[OutputText]
List= (.... , wg.nc, tetag.nc, phig.nc, pbarvg.nc, pbarug.nc, masseg.nc)
[OutputFiles]
List= (.... ), \
(phystoke.nc, ${R_OUT_ATM_O_M}/${PREFIX}_1M_phystoke.nc, NONE)
* if you are not running with modipsl, save the output files : '''wg.nc''', '''tetag.nc''', '''phig.nc''', '''pbarvg.nc''', '''pbarug.nc''', '''masseg.nc''' and '''phystoke.nc'''
== Variables descriptions ==
phiss.standard_name='surface geopotentiel'
levs.standard_name='Model Level Number'
upwds.standard_name='KE sat. up. mass flux'
dnwds.standard_name='KE sat. down. mass flux'
fmths.standard_name='Mass flux thermals'
enths.standard_name='Ent therm.'
fmths.units='kg m2 s-1'
enths.units='kg m2 s-1'
upwds.units='kg m2 s-1'
dnwds.units='kg m2 s-1'
ts.standard_name='t'
das.standard_name='adiabatic ascent'
phis.standard_name='geopotentiel instantane'
phiss.standard_name='Surface Geopotential Height'
aires.standard_name='Grid area'
masses.standard_name='Mass'
levs.standard_name='Model Level Number'
phis.standard_name='geopotentiel instantane'
pbarus.standard_name='flx de masse zonal'
ws.standard_name='flx de masse vert'
tetas.standard_name='temperature potentielle'
pbarus.units = 'kg m2/s'
ws.units = 'kg m2/s'
tetas.units = '-'
phis.units = '-'
masses.units='kg'
[[Category:HowTo]]
866a8a93737eda72f8cf051ae26a9f2680b2b03a
413
393
2023-07-05T12:10:56Z
Acozic
54
wikitext
text/x-wiki
= How to : create mass flow files for inversion models =
The lmdz model allows to output mass flow files that can be used as inversion model forcing files. This option is drive by the parameter <code>offline</code>
Note:
* we are working with LMDZ after [https://trac.lmd.jussieu.fr/LMDZ/changeset/4608/ rev 4608]
* Actually, this option is not working with XIOS in the dynamic (we are using writefield to write dynamic output files)
== option offline in LMDZ ==
To use this option you need :
* to put parameter <code>offline</code> to yes
* add the reference to <code><file_definition src="./file_def_phystoke_lmdz.xml"/></code> in <code>context_lmdz.xml</code>
* choose the output storage frequency with parameter <code>offline_time</code>. For example, for a storage all the 3hours (1day/8) we will choose <code>offline_time=8</code>
* if you are running with modipsl, modify lmdz.card to save mass flux files :
[OutputText]
List= (.... , wg.nc, tetag.nc, phig.nc, pbarvg.nc, pbarug.nc, masseg.nc)
[OutputFiles]
List= (.... ), \
(phystoke.nc, ${R_OUT_ATM_O_H}/${PREFIX}_3H_phystoke.nc, NONE)
* if you are not running with modipsl, save the output files : '''wg.nc''', '''tetag.nc''', '''phig.nc''', '''pbarvg.nc''', '''pbarug.nc''', '''masseg.nc''' and '''phystoke.nc'''
== Variables descriptions ==
phiss.standard_name='surface geopotentiel'
levs.standard_name='Model Level Number'
upwds.standard_name='KE sat. up. mass flux'
dnwds.standard_name='KE sat. down. mass flux'
fmths.standard_name='Mass flux thermals'
enths.standard_name='Ent therm.'
fmths.units='kg m2 s-1'
enths.units='kg m2 s-1'
upwds.units='kg m2 s-1'
dnwds.units='kg m2 s-1'
ts.standard_name='t'
das.standard_name='adiabatic ascent'
phis.standard_name='geopotentiel instantane'
phiss.standard_name='Surface Geopotential Height'
aires.standard_name='Grid area'
masses.standard_name='Mass'
levs.standard_name='Model Level Number'
phis.standard_name='geopotentiel instantane'
pbarus.standard_name='flx de masse zonal'
ws.standard_name='flx de masse vert'
tetas.standard_name='temperature potentielle'
pbarus.units = 'kg m2/s'
ws.units = 'kg m2/s'
tetas.units = '-'
phis.units = '-'
masses.units='kg'
[[Category:HowTo]]
a362b51a0ff7e1198003b1b153c12100bc518dfe
414
413
2023-07-05T12:17:05Z
Acozic
54
wikitext
text/x-wiki
= How to : create mass flow files for inversion models =
The lmdz model allows to output mass flow files that can be used as inversion model forcing files. This option is drive by the parameter <code>offline</code>
Note:
* we are working with LMDZ after [https://trac.lmd.jussieu.fr/LMDZ/changeset/4608/ rev 4608]
* Actually, this option is not working with XIOS in the dynamic (we are using writefield to write dynamic output files)
== option offline in LMDZ ==
To use this option you need :
* to put parameter <code>offline</code> to yes
* add the reference to <code><file_definition src="./file_def_phystoke_lmdz.xml"/></code> in <code>context_lmdz.xml</code>
* choose the output storage frequency with parameter <code>offline_time</code>. For example, for a storage all the 3hours (1day/8) we will choose <code>offline_time=8</code>
* if you are running with modipsl, modify lmdz.card to save mass flux files :
[OutputText]
List= (.... , wg.nc, tetag.nc, phig.nc, pbarvg.nc, pbarug.nc, masseg.nc)
[OutputFiles]
List= (.... ), \
(phystoke.nc, ${R_OUT_ATM_O_H}/${PREFIX}_3H_phystoke.nc, NONE)
* if you are not running with modipsl, save the output files : '''wg.nc''', '''tetag.nc''', '''phig.nc''', '''pbarvg.nc''', '''pbarug.nc''', '''masseg.nc''' and '''phystoke.nc'''
== Variables descriptions in phystoke.nc ==
* Name="t_stok" long_name="Temperature" unit="K"
* "coefh_stok" long_name="coeff de melange dans la couche limite" unit="-"
* "fm_th_stok" long_name="Mass flux thermals" unit="kg m-2.s-1"
* "en_th_stok" long_name="Thermal plume entrainment" unit="kg m-1.s-1"
* "da_stok" long_name="adiabatic ascen" unit="kg m-2.s-1"
* "mp_stok" long_name="precipitating downdraft mass flux under hydrostatic approximation" unit="kg m-2.s-1"
* "wght_stok" long_name="weights of the layers feeding convection" unit="-"
* "upwd_stok" long_name="saturated updraft mass flux" unit="kg m-2.s-1"
* "dnwd_stok" long_name="saturated downdraft mass flux" unit="kg m-2.s-1"
* "phi_lev"[0-79] "mass flow environmental mixing" unit="kg m-2 s-1"
* "yu1_stok" long_name="zonal surface wind" unit="m.s-1"
* "yv1_stok" long_name="wind meridian surface" unit="m.s-1"
All of these variables are an average of offline_time frequency, on the horizontal grid with vertical level klev (and not presnivs)
[[Category:HowTo]]
f2db9718869a961bd74674d99d6d047a67019c98
417
414
2023-07-21T08:47:27Z
Acozic
54
/* How to : create mass flow files for inversion models */
wikitext
text/x-wiki
= How to : create mass flow files for inversion models =
The lmdz model allows to output mass flow files that can be used as inversion model forcing files. This option is drive by the parameter <code>offline</code>
Note:
* we are working with LMDZ after [https://trac.lmd.jussieu.fr/LMDZ/changeset/4608/ rev 4608]
* Actually, this option is not working with XIOS in the dynamic (we are using writefield to write dynamic output files)
== option offline in LMDZ ==
To use this option you need :
* to put parameter <code>offline</code> to yes
* add the reference to <code><file_definition src="./file_def_phystoke_lmdz.xml"/></code> in <code>context_lmdz.xml</code>
* choose the output storage frequency with parameter <code>offline_time</code>. For example, for a storage all the 3hours (1day/8) we will choose <code>offline_time=8</code>
* if you are running with modipsl, modify lmdz.card to save mass flux files :
[OutputText]
List= (.... , wg.nc, tetag.nc, phig.nc, pbarvg.nc, pbarug.nc, masseg.nc)
[OutputFiles]
List= (.... ), \
(phystoke.nc, ${R_OUT_ATM_O_H}/${PREFIX}_3H_phystoke.nc, NONE)
* if you are not running with modipsl, save the output files : '''wg.nc''', '''tetag.nc''', '''phig.nc''', '''pbarvg.nc''', '''pbarug.nc''', '''masseg.nc''' and '''phystoke.nc'''
== Variables descriptions in phystoke.nc ==
* Name="t_stok" long_name="Temperature" unit="K"
* "coefh_stok" long_name="coeff de melange dans la couche limite" unit="-"
* "fm_th_stok" long_name="Mass flux thermals" unit="kg m-2.s-1"
* "en_th_stok" long_name="Thermal plume entrainment" unit="kg m-1.s-1"
* "da_stok" long_name="adiabatic ascen" unit="kg m-2.s-1"
* "mp_stok" long_name="precipitating downdraft mass flux under hydrostatic approximation" unit="kg m-2.s-1"
* "wght_stok" long_name="weights of the layers feeding convection" unit="-"
* "upwd_stok" long_name="saturated updraft mass flux" unit="kg m-2.s-1"
* "dnwd_stok" long_name="saturated downdraft mass flux" unit="kg m-2.s-1"
* "phi_lev"[0-79] "mass flow environmental mixing" unit="kg m-2 s-1"
* "yu1_stok" long_name="zonal surface wind" unit="m.s-1"
* "yv1_stok" long_name="wind meridian surface" unit="m.s-1"
All of these variables are an average of offline_time frequency, on the horizontal grid with vertical level klev (and not presnivs)
== Variables descriptions in dynamic ==
* "phig" long_name="Surface geopotential height" unit="m2 s-2"
* "massg" long_name="Air mass (averaged over 3 hours)" unit="kg"
* "tetag" long_name="Potential temperature (averaged over 3 hours)" unit="K"
* "pbarug" long_name="Zonal advected mass fluxes (averaged over 3 hours)" unit="kg m-2 s-1"
* "pbarvg" long_name="Meridional advected mass fluxes (averaged over 3 hours)" unit="kg m-2 s-1"
* "wg" long_name="Vertical advected mass flux (averaged over 3 hours)" unit="kg m-2 s-1"
[[Category:HowTo]]
f454f30980ed6ecd3e36942c21884bcbd1469d12
418
417
2023-07-21T08:49:49Z
Acozic
54
wikitext
text/x-wiki
= How to : create mass flow files for inversion models =
The lmdz model allows to output mass flow files that can be used as inversion model forcing files. This option is drive by the parameter <code>offline</code>
Note:
* we are working with LMDZ after [https://trac.lmd.jussieu.fr/LMDZ/changeset/4608/ rev 4608]
* Actually, this option is not working with XIOS in the dynamic (we are using writefield to write dynamic output files)
== option offline in LMDZ ==
To use this option you need :
* to put parameter <code>offline</code> to yes
* add the reference to <code><file_definition src="./file_def_phystoke_lmdz.xml"/></code> in <code>context_lmdz.xml</code>
* choose the output storage frequency with parameter <code>offline_time</code>. For example, for a storage all the 3hours (1day/8) we will choose <code>offline_time=8</code>
* if you are running with modipsl, modify lmdz.card to save mass flux files :
[OutputText]
List= (.... , wg.nc, tetag.nc, phig.nc, pbarvg.nc, pbarug.nc, masseg.nc)
[OutputFiles]
List= (.... ), \
(phystoke.nc, ${R_OUT_ATM_O_H}/${PREFIX}_3H_phystoke.nc, NONE)
* if you are not running with modipsl, save the output files : '''wg.nc''', '''tetag.nc''', '''phig.nc''', '''pbarvg.nc''', '''pbarug.nc''', '''masseg.nc''' and '''phystoke.nc'''
== Physics mass flow Variables descriptions (phystoke.nc) ==
* Name="t_stok" long_name="Temperature" unit="K"
* "coefh_stok" long_name="coeff de melange dans la couche limite" unit="-"
* "fm_th_stok" long_name="Mass flux thermals" unit="kg m-2.s-1"
* "en_th_stok" long_name="Thermal plume entrainment" unit="kg m-1.s-1"
* "da_stok" long_name="adiabatic ascen" unit="kg m-2.s-1"
* "mp_stok" long_name="precipitating downdraft mass flux under hydrostatic approximation" unit="kg m-2.s-1"
* "wght_stok" long_name="weights of the layers feeding convection" unit="-"
* "upwd_stok" long_name="saturated updraft mass flux" unit="kg m-2.s-1"
* "dnwd_stok" long_name="saturated downdraft mass flux" unit="kg m-2.s-1"
* "phi_lev"[0-79] "mass flow environmental mixing" unit="kg m-2 s-1"
* "yu1_stok" long_name="zonal surface wind" unit="m.s-1"
* "yv1_stok" long_name="wind meridian surface" unit="m.s-1"
All of these variables are an average of offline_time frequency, on the horizontal grid with vertical level klev (and not presnivs)
== Dynamics mass flow Variables descriptions (wg.nc, tetag.nc, phig.nc, pbarvg.nc, pbarug.nc, masseg.nc) ==
* "phig" long_name="Surface geopotential height" unit="m2 s-2"
* "massg" long_name="Air mass (averaged over 3 hours)" unit="kg"
* "tetag" long_name="Potential temperature (averaged over 3 hours)" unit="K"
* "pbarug" long_name="Zonal advected mass fluxes (averaged over 3 hours)" unit="kg m-2 s-1"
* "pbarvg" long_name="Meridional advected mass fluxes (averaged over 3 hours)" unit="kg m-2 s-1"
* "wg" long_name="Vertical advected mass flux (averaged over 3 hours)" unit="kg m-2 s-1"
[[Category:HowTo]]
d69af61a057010904bd9d5c2c72e27744e623666
Utilisateur:ErikKillough0
2
191
394
2023-04-27T14:07:59Z
ErikKillough0
58
Page créée avec « I'm Erik and I live with my husband and our 3 children in Renishaw, in the NA south part. My hobbies are Origami, Running and American football.<br><br>Here is my web page... »
wikitext
text/x-wiki
I'm Erik and I live with my husband and our 3 children in Renishaw, in the NA south part. My hobbies are Origami, Running and American football.<br><br>Here is my web page; [https://www.youtube.com/channel/UCnLbecqNrMdWqqQebCt-SYg pola slot olympus hari ini]
3266f8de6fff5392b6f82798613d4330d0ba015a
Utilisateur:JettSteinberg
2
192
395
2023-04-27T14:39:28Z
JettSteinberg
59
Page créée avec « I am Jett from Concord. I am learning to play the Lute. Other hobbies are Jukskei.<br><br>my webpage :: paraparesis - [https://www.uniformfactory.ae www.uniformfactory.ae] - »
wikitext
text/x-wiki
I am Jett from Concord. I am learning to play the Lute. Other hobbies are Jukskei.<br><br>my webpage :: paraparesis - [https://www.uniformfactory.ae www.uniformfactory.ae] -
5b2ff834625156764a863706f2b4af79cf7f0a45
Utilisateur:KristoferCoyne
2
193
396
2023-04-27T20:25:33Z
KristoferCoyne
57
Page créée avec « Hello dear visitor. I'm Augustus plus i totally dig that advertsing name. Years ago she moved to Vermont. My job is a supervisor for doing pretty good financially. To cook... »
wikitext
text/x-wiki
Hello dear visitor. I'm Augustus plus i totally dig that advertsing name. Years ago she moved to Vermont. My job is a supervisor for doing pretty good financially. To cook is a thing that she is totally addicted in. Check out her website here: https://www.mavinlearning.com/newsletter/college-applications-writing-the-best-personal-statement/<br><br>Review my homepage: [https://www.mavinlearning.com/newsletter/college-applications-writing-the-best-personal-statement/ vw fort walton beach]
b41cff61983c1bd0ba43692085d7d28138541c92
Utilisateur:BennyBrune76424
2
195
398
2023-04-27T21:09:52Z
BennyBrune76424
68
Page créée avec « Hello and welcome. I am Mitchel. His family lives in New Jersey but now he is considering options. Going to karaoke is something I will never give inside. Supervising is w... »
wikitext
text/x-wiki
Hello and welcome. I am Mitchel. His family lives in New Jersey but now he is considering options. Going to karaoke is something I will never give inside. Supervising is what I do for cash.<br><br>my blog post - [https://calendrier-republicain.net/ https://calendrier-republicain.net/]
2a682557a397eb688736fdaee9d755adb0852a22
Utilisateur:FranklinKinchen
2
196
399
2023-04-27T22:56:10Z
FranklinKinchen
70
Page créée avec « Hello, dear friend! I am Franklin. I am happy that I can join to the entire world. I live in Belgium, in the south region. I dream to go to the different countries, to get... »
wikitext
text/x-wiki
Hello, dear friend! I am Franklin. I am happy that I can join to the entire world. I live in Belgium, in the south region. I dream to go to the different countries, to get familiarized with interesting individuals.<br><br>Feel free to surf to my website - [https://thepearlclinicantalya.com/blog/travel/turkey-teeth/ turkish teeth]
bde1686715d8e87d39e66045fabda0186d45f527
Utilisateur:DominicKater
2
197
400
2023-04-28T02:20:25Z
DominicKater
74
Page créée avec « I am Dominic from Kobenhavn K. I am learning to play the Lute. Other hobbies are Paintball.<br><br>Look into my page - [https://www.uniformfactory.ae/hoodies.html hoodies... »
wikitext
text/x-wiki
I am Dominic from Kobenhavn K. I am learning to play the Lute. Other hobbies are Paintball.<br><br>Look into my page - [https://www.uniformfactory.ae/hoodies.html hoodies subs]
620cfa9f1030bb315419191cf57e7b94bd8e6207
Utilisateur:HugoL679815044
2
198
401
2023-04-28T03:52:20Z
HugoL679815044
76
Page créée avec « Hi there! :) My name is Hugo, I'm a student studying Physics from Manaus, Brazil.<br><br>Also visit my website :: [http://www.yourhealthsolutionfix.com/terms-and-condition... »
wikitext
text/x-wiki
Hi there! :) My name is Hugo, I'm a student studying Physics from Manaus, Brazil.<br><br>Also visit my website :: [http://www.yourhealthsolutionfix.com/terms-and-conditions/ คาสิโนออนไลน์]
bcb7d666a0a8d3885f1a53fe035fac792f04938d
Utilisateur:EduardoMayberry
2
199
402
2023-04-28T04:33:21Z
EduardoMayberry
77
Page créée avec « I am Eduardo from Foz Do Iguacu. I love to play French Horn. Other hobbies are Gaming.<br><br>my page; [https://o-magazin.ru/ скачать порно] »
wikitext
text/x-wiki
I am Eduardo from Foz Do Iguacu. I love to play French Horn. Other hobbies are Gaming.<br><br>my page; [https://o-magazin.ru/ скачать порно]
2a85bbf22433d40a9d6f279974b317104d708e60
Utilisateur:MayaKsq680
2
200
403
2023-04-28T06:15:52Z
MayaKsq680
79
Page créée avec « [https://pornososalkino.com/categories/bolshoj-chlen/ большой член] »
wikitext
text/x-wiki
[https://pornososalkino.com/categories/bolshoj-chlen/ большой член]
72157ae11f5e0da471f79e27024676923691ed1a
Utilisateur:MargaritoPedder
2
202
405
2023-04-28T08:23:13Z
MargaritoPedder
84
Page créée avec « For example, for many CME and CBOT contracts, on the expiration of the December contract, the March futures become the nearest contract. »
wikitext
text/x-wiki
For example, for many CME and CBOT contracts, on the expiration of the December contract, the March futures become the nearest contract.
f16afc568a00ed6782d45936c7c5284f3d7ae946
The netCDF library
0
125
408
305
2023-05-16T13:17:14Z
Lguez
4
wikitext
text/x-wiki
== the NetCDF library ==
The model reads and writes input and output files in NetCDF (Network Common Data Form) format (developed and maintained by Unidata: https://www.unidata.ucar.edu/software/netcdf/ ) and therefore a NetCDF library must be at hand when compiling and running LMDZ6.
As this library is not quite standard, chances are that you might need to install it yourself on your system (note that the [[WhatIs: The install lmdz.sh script|install_lmdz.sh]] default behavior is to download and install that library), hence this page with some indications on how to do so.
== Checking if a NetCDF library is already available ==
It is possible that the library, including its Fortran component, is already available. An easy way to check this is to see if the related utilities like '''ncdump''' are available, i.e. that
<syntaxhighlight lang="bash">
which ncdump
</syntaxhighlight>
returns a positive answer.
Note that this does not suffice as the full library, including its Fortran component, and not just the related utilities are required. A neat way to check this is to use the '''nf-config'''
<syntaxhighlight lang="bash">
nf-config --all
</syntaxhighlight>
returns something meaningful. If not, you probably need to take some action along the lines of what is indicated in the following sections.
== Various ways to install the NetCDF library ==
=== Install from the package repository of your Linux distribution ===
This is the easiest (and recommended) way. For example, if your distribution is Ubuntu or Linux Mint (and you have admin, i.e. ''sudo'' rights), open a terminal and type:
<syntaxhighlight lang="bash">
sudo apt install netcdf-bin libnetcdff-dev
</syntaxhighlight>
If you want to use XIOS with LMDZ then you need the parallel-enabled version of NetCDF. In addition to the previous '''apt install''' command, under Ubuntu or Linux Mint, type:
sudo apt install libnetcdf-mpi-dev libhdf5-mpi-dev
=== Personal installation ===
One can always download the source code and compile the NetCDF library (see https://docs.unidata.ucar.edu/netcdf-c/current/faq.html#HowdoIgetthenetCDFsoftwarepackage ). You can use the following home-made "install_netcdf4_hdf5_seq.bash" script to do so. For this, ensure that you are in your home directory and:
<syntaxhighlight lang="bash">
mkdir netcdf
cd netcdf
wget -nv --no-check-certificate http://www.lmd.jussieu.fr/~lmdz/pub/import/install_netcdf4_hdf5_seq.bash
chmod u=rwx install_netcdf4_hdf5_seq.bash
./install_netcdf4_hdf5_seq.bash > netcdf.log 2>&1
</syntaxhighlight>
Compiling the library and dependencies can take a while (>>15 minutes; be patient).
Once this is done, check file netcdf.log to verify that all went well.
You may want to also add its "bin" directory to your PATH environment variable by adding in your .bashrc a line of:
<syntaxhighlight lang="bash">
export PATH=$PATH:$HOME/netcdf/bin
</syntaxhighlight>
The assumption here is that you have run the "install_netcdf4_hdf5_seq.bash" script in a "netcdf" subdirectory of your home directory. Adapt accordingly if not.
Check that the installation was successfully installed :-)
Again, a neat way to do that is to run and check the output of
<syntaxhighlight lang="bash">
nf-config --all
</syntaxhighlight>
=== Personal installation of an advanced NetCDF4-HDF5 library with MPI enabled ===
This specific version is useful especially if running with the XIOS library.
A prerequisite is to have an MPI library installed and available.
You can use the following home-made "install_netcdf4_hdf5_seq.bash" script to do so. For this, ensure that you are in your home directory and:
<syntaxhighlight lang="bash">
mkdir netcdf4hdf5
cd netcdf4hdf5
wget -nv --no-check-certificate http://www.lmd.jussieu.fr/~lmdz/pub/import/install_netcdf4_hdf5.bash
chmod u=rwx install_netcdf4_hdf5.bash
./install_netcdf4_hdf5.bash -CC mpicc -FC mpif90 -CXX mpiCC -MPI /path/to/your/MPI/install > netcdf.log 2>&1
</syntaxhighlight>
You should of course adapt the command line, especially the ''-MPI /path/to/your/MPI/install'' part to your settings.
Compiling the library and dependencies can take a while (>>15 minutes; be patient).
Once this is done, check file netcdf.log to verify that all went well.
You may want to also add its "bin" directory to your PATH environment variable by adding in your .bashrc a line of:
<syntaxhighlight lang="bash">
export PATH=$PATH:$HOME/netcdf4hdf5/bin
</syntaxhighlight>
The assumption here is that you have run the "install_netcdf4_hdf5.bash" script in a "netcdf4hdf5" subdirectory of your home directory. Adapt accordingly if not.
Check that the installation was successfully installed :-)
Again, a neat way to do that is to run and check the output of
<syntaxhighlight lang="bash">
nf-config --all
</syntaxhighlight>
03/01/2022
[[Category:HowTo]]
[[Category:WhatIs]]
ff40fbcb10def1fecef5befa920c902c6b1345fd
409
408
2023-05-16T13:19:06Z
Lguez
4
wikitext
text/x-wiki
== the NetCDF library ==
The model reads and writes input and output files in NetCDF (Network Common Data Form) format (developed and maintained by Unidata: https://www.unidata.ucar.edu/software/netcdf/ ) and therefore a NetCDF library must be at hand when compiling and running LMDZ6.
As this library is not quite standard, chances are that you might need to install it yourself on your system (note that the [[WhatIs: The install lmdz.sh script|install_lmdz.sh]] default behavior is to download and install that library), hence this page with some indications on how to do so.
== Checking if a NetCDF library is already available ==
It is possible that the library, including its Fortran component, is already available. An easy way to check this is to see if the related utilities like '''ncdump''' are available, i.e. that
<syntaxhighlight lang="bash">
which ncdump
</syntaxhighlight>
returns a positive answer.
Note that this does not suffice as the full library, including its Fortran component, and not just the related utilities are required. A neat way to check this is to use the '''nf-config'''
<syntaxhighlight lang="bash">
nf-config --all
</syntaxhighlight>
returns something meaningful. If not, you probably need to take some action along the lines of what is indicated in the following sections.
== Various ways to install the NetCDF library ==
=== Install from the package repository of your Linux distribution ===
This is the easiest and fastest (and recommended) way. For example, if your distribution is Ubuntu or Linux Mint (and you have admin, i.e. ''sudo'' rights), open a terminal and type:
<syntaxhighlight lang="bash">
sudo apt install netcdf-bin libnetcdff-dev
</syntaxhighlight>
If you want to use XIOS with LMDZ then you need the parallel-enabled version of NetCDF. In addition to the previous '''apt install''' command, under Ubuntu or Linux Mint, type:
sudo apt install libnetcdf-mpi-dev libhdf5-mpi-dev
=== Personal installation ===
One can always download the source code and compile the NetCDF library (see https://docs.unidata.ucar.edu/netcdf-c/current/faq.html#HowdoIgetthenetCDFsoftwarepackage ). You can use the following home-made "install_netcdf4_hdf5_seq.bash" script to do so. For this, ensure that you are in your home directory and:
<syntaxhighlight lang="bash">
mkdir netcdf
cd netcdf
wget -nv --no-check-certificate http://www.lmd.jussieu.fr/~lmdz/pub/import/install_netcdf4_hdf5_seq.bash
chmod u=rwx install_netcdf4_hdf5_seq.bash
./install_netcdf4_hdf5_seq.bash > netcdf.log 2>&1
</syntaxhighlight>
Compiling the library and dependencies can take a while (>>15 minutes; be patient).
Once this is done, check file netcdf.log to verify that all went well.
You may want to also add its "bin" directory to your PATH environment variable by adding in your .bashrc a line of:
<syntaxhighlight lang="bash">
export PATH=$PATH:$HOME/netcdf/bin
</syntaxhighlight>
The assumption here is that you have run the "install_netcdf4_hdf5_seq.bash" script in a "netcdf" subdirectory of your home directory. Adapt accordingly if not.
Check that the installation was successfully installed :-)
Again, a neat way to do that is to run and check the output of
<syntaxhighlight lang="bash">
nf-config --all
</syntaxhighlight>
=== Personal installation of an advanced NetCDF4-HDF5 library with MPI enabled ===
This specific version is useful especially if running with the XIOS library.
A prerequisite is to have an MPI library installed and available.
You can use the following home-made "install_netcdf4_hdf5_seq.bash" script to do so. For this, ensure that you are in your home directory and:
<syntaxhighlight lang="bash">
mkdir netcdf4hdf5
cd netcdf4hdf5
wget -nv --no-check-certificate http://www.lmd.jussieu.fr/~lmdz/pub/import/install_netcdf4_hdf5.bash
chmod u=rwx install_netcdf4_hdf5.bash
./install_netcdf4_hdf5.bash -CC mpicc -FC mpif90 -CXX mpiCC -MPI /path/to/your/MPI/install > netcdf.log 2>&1
</syntaxhighlight>
You should of course adapt the command line, especially the ''-MPI /path/to/your/MPI/install'' part to your settings.
Compiling the library and dependencies can take a while (>>15 minutes; be patient).
Once this is done, check file netcdf.log to verify that all went well.
You may want to also add its "bin" directory to your PATH environment variable by adding in your .bashrc a line of:
<syntaxhighlight lang="bash">
export PATH=$PATH:$HOME/netcdf4hdf5/bin
</syntaxhighlight>
The assumption here is that you have run the "install_netcdf4_hdf5.bash" script in a "netcdf4hdf5" subdirectory of your home directory. Adapt accordingly if not.
Check that the installation was successfully installed :-)
Again, a neat way to do that is to run and check the output of
<syntaxhighlight lang="bash">
nf-config --all
</syntaxhighlight>
03/01/2022
[[Category:HowTo]]
[[Category:WhatIs]]
e42cd837efdde01ada3def9f1770839f9f940975
Building an MPI library
0
126
410
312
2023-05-24T06:56:30Z
Emillour
3
wikitext
text/x-wiki
There are a few freely available MPI libraries around; among the most widely spread are the OpenMPI https://www.open-mpi.org/ and MPICH https://www.mpich.org/ libraries
== Checking if you have an Fortran enabled MPI library already installed and at hand ==
This can easily be done by checking if the MPI wrapper '''mpif90''' is available, i.e. that
<syntaxhighlight lang="bash">
which mpif90
</syntaxhighlight>
returns something meaningful
== using a package manager ==
If you have sudo privileges and are on an Ubuntu or Linux Mint machine you should be able to install the OpenMPI library with
<syntaxhighlight lang="bash">
sudo apt install libopenmpi-dev openmpi-bin
</syntaxhighlight>
== Example of personal installation of the the OpenMPI library ==
To adapt to fit your onw needs and system specificities, obviously.
In the example below the installation is done in the '''$HOME/myopenmpi''' directory (for convenience this path is stored in the '''PATH_OPENMPI''' variable.
<syntaxhighlight lang="bash">
PATH_OPENMPI=$HOME/myopenmpi/
mkdir -p $PATH_OPENMPI
cd $PATH_OPENMPI
wget https://www.open-mpi.org/software/ompi/v1.10/downloads/openmpi-1.10.3.tar.gz
gunzip openmpi-1.10.3.tar.gz
tar xvf openmpi-1.10.3.tar
cd openmpi-1.10.3
./configure --prefix $PATH_OPENMPI
make all install
</syntaxhighlight>
To check that the install went well check that
<syntaxhighlight lang="bash">
$PATH_OPENMPI/bin/mpif90 -V
</syntaxhighlight>
returns something meaningful like
<syntaxhighlight lang="bash">
GNU Fortran (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
</syntaxhighlight>
Once you have a distribution correctly installed you will need to update your environment variables '''PATH''' and '''LD_LIBRARY_PATH''' to point to the relevant locations (the '''bin''' and '''lib''' subdirectories of the distribution).
In practice this is typically done in your ''$HOME/.bash_profile'' or ''$HOME/.bashrc'' file, where for instance, if your installed the library in '''$HOME/myopenmpi''' you would add:
<syntaxhighlight lang="bash">
export PATH=$PATH:$HOME/myopenmpi/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HOME/myopenmpi/lib
</syntaxhighlight>
== A few things worth knowing about ==
* '''mpif90''' is just a wrapper around a given compiler which could be gfortran, ifort, pgfortran, etc. to know more about that run
<syntaxhighlight lang="bash">
mpif90 --version
</syntaxhighlight>
* in some cases (e.g. with ifort) the Fortran wrapper is called '''mpiifort''', not '''mpif90'''
* It is vital to use the '''mpirun''' command from the same package than the '''mpif90''' compilation wrapper used to compile the code. Otherwise one can get some really weird results...
24/05/2023
[[Category:FAQ]]
c2272ac5b296f023efccfc42a43068ab33fc7426
411
410
2023-05-24T06:58:09Z
Emillour
3
wikitext
text/x-wiki
There are a few freely available MPI libraries around; among the most widely spread are the OpenMPI https://www.open-mpi.org/ and MPICH https://www.mpich.org/ libraries
== Checking if you have an Fortran enabled MPI library already installed and at hand ==
This can easily be done by checking if the MPI wrapper '''mpif90''' is available, i.e. that
<syntaxhighlight lang="bash">
which mpif90
</syntaxhighlight>
returns something meaningful
== using a package manager ==
If you have sudo privileges and are on an Ubuntu or Linux Mint machine you should be able to install the OpenMPI library with
<syntaxhighlight lang="bash">
sudo apt install libopenmpi-dev openmpi-bin
</syntaxhighlight>
== Example of personal installation of the the OpenMPI library ==
To adapt to fit your onw needs and system specificities, obviously.
In the example below the installation is done in the '''$HOME/myopenmpi''' directory (for convenience this path is stored in the '''PATH_OPENMPI''' variable.
<syntaxhighlight lang="bash">
PATH_OPENMPI=$HOME/myopenmpi/
mkdir -p $PATH_OPENMPI
cd $PATH_OPENMPI
wget https://www.open-mpi.org/software/ompi/v1.10/downloads/openmpi-1.10.3.tar.gz
gunzip openmpi-1.10.3.tar.gz
tar xvf openmpi-1.10.3.tar
cd openmpi-1.10.3
./configure --prefix $PATH_OPENMPI
make all install
</syntaxhighlight>
To check that the install went well check that
<syntaxhighlight lang="bash">
$PATH_OPENMPI/bin/mpif90 -V
</syntaxhighlight>
returns something meaningful like
<syntaxhighlight lang="bash">
GNU Fortran (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
</syntaxhighlight>
Once you have a distribution correctly installed you will need to update your environment variables '''PATH''' and '''LD_LIBRARY_PATH''' to point to the relevant locations (the '''bin''' and '''lib''' subdirectories of the distribution).
In practice this is typically done in your ''$HOME/.bash_profile'' or ''$HOME/.bashrc'' file, where for instance, if your installed the library in '''$HOME/myopenmpi''' you would add:
<syntaxhighlight lang="bash">
export PATH=$PATH:$HOME/myopenmpi/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HOME/myopenmpi/lib
</syntaxhighlight>
== A few things worth knowing about ==
* '''mpif90''' is just a wrapper around a given compiler which could be gfortran, ifort, pgfortran, etc. to know more about that run
<syntaxhighlight lang="bash">
mpif90 --version
</syntaxhighlight>
* in some cases the Fortran wrapper is called '''mpifort''' or '''mpiifort''' (e.g. with ifort) , not '''mpif90'''
* It is vital to use the '''mpirun''' command from the same package than the '''mpif90''' compilation wrapper used to compile the code. Otherwise one can get some really weird results...
24/05/2023
[[Category:FAQ]]
3a5e434354bd4fceb441921dc29dafd3cc3084b0
412
411
2023-05-24T07:02:05Z
Emillour
3
wikitext
text/x-wiki
There are a few freely available MPI libraries around; among the most widely spread are the OpenMPI https://www.open-mpi.org/ and MPICH https://www.mpich.org/ libraries
== Checking if you have an Fortran enabled MPI library already installed and at hand ==
This can easily be done by checking if the MPI wrapper '''mpif90''' is available, i.e. that
<syntaxhighlight lang="bash">
which mpif90
</syntaxhighlight>
returns something meaningful
== using a package manager ==
If you have sudo privileges and are on an Ubuntu or Linux Mint machine you should be able to install the OpenMPI library with
<syntaxhighlight lang="bash">
sudo apt install libopenmpi-dev openmpi-bin
</syntaxhighlight>
== Example of personal installation of the the OpenMPI library ==
To adapt to fit your onw needs and system specificities, obviously.
In the example below the installation is done in the '''$HOME/myopenmpi''' directory (for convenience this path is stored in the '''PATH_OPENMPI''' variable.
<syntaxhighlight lang="bash">
PATH_OPENMPI=$HOME/myopenmpi/
mkdir -p $PATH_OPENMPI
cd $PATH_OPENMPI
wget https://www.open-mpi.org/software/ompi/v1.10/downloads/openmpi-1.10.3.tar.gz
gunzip openmpi-1.10.3.tar.gz
tar xvf openmpi-1.10.3.tar
cd openmpi-1.10.3
./configure --prefix $PATH_OPENMPI
make all install
</syntaxhighlight>
To check that the install went well check that
<syntaxhighlight lang="bash">
$PATH_OPENMPI/bin/mpif90 -V
</syntaxhighlight>
returns something meaningful like
<syntaxhighlight lang="bash">
GNU Fortran (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
</syntaxhighlight>
Once you have a distribution correctly installed you will need to update your environment variables '''PATH''' and '''LD_LIBRARY_PATH''' to point to the relevant locations (the '''bin''' and '''lib''' subdirectories of the distribution).
In practice this is typically done in your ''$HOME/.bash_profile'' or ''$HOME/.bashrc'' file, where for instance, if your installed the library in '''$HOME/myopenmpi''' you would add:
<syntaxhighlight lang="bash">
export PATH=$PATH:$HOME/myopenmpi/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HOME/myopenmpi/lib
</syntaxhighlight>
== A few things worth knowing about ==
* '''mpif90''' is just a wrapper around a given compiler which could be gfortran, ifort, pgfortran, etc. to know more about that run
<syntaxhighlight lang="bash">
mpif90 --version
</syntaxhighlight>
* in some cases the Fortran wrapper is called '''mpifort''' or '''mpiifort''' (e.g. with ifort, sometimes) , not '''mpif90'''
* It is vital to use the '''mpirun''' command from the same package than the '''mpif90''' compilation wrapper used to compile the code. Otherwise one can get some really weird results...
24/05/2023
[[Category:FAQ]]
f94ec7895d07c7f71b58857fd392c6cd1a243fa7
The flag aerosol strat parameter
0
204
422
2023-11-21T08:56:12Z
Emillour
3
Page créée avec « The '''flag_aerosol_strat''' parameter is an integer flag which sets which forcing is used for stratospheric aerosols optical properties (i.e. format of the taustrat*.nc f... »
wikitext
text/x-wiki
The '''flag_aerosol_strat''' parameter is an integer flag which sets which forcing is used for stratospheric aerosols optical properties (i.e. format of the taustrat*.nc files read by the model; see https://trac.lmd.jussieu.fr/LMDZ/browser/LMDZ6/trunk/libf/phylmd/readaerosolstrato_m.F90) :
* flag_aerosol_strat = 0 : no stratospheric aerosols (default value)
* flag_aerosol_strat = 1 : old forcings (only case; only one optical parameter)
* flag_aerosol_strat = 2 : 2 files corresponding to SW and LW spectral bands (files tauswstrat.2D.nc and taulwstrat.2D.nc) with 3 optical parameters. This option was introduced for CMIP6 runs using RRTM (i.e. requires rrtm=1 flag)
21/11/2023
[[Category:WhatIs]]
[[Category:Inputs]]
c93949a92e9ad06c57cf22f8eeeefbba500ac738
Some pointers about standalone installation of the XIOS library
0
120
424
274
2023-11-21T10:43:57Z
Emillour
3
wikitext
text/x-wiki
This page is mostly for "do-it-yourself" people interested in installing the XIOS library, as this step is automated in the install_lmdz.sh script (if run with the ''-xios'' option). Note also that the download and installation by install_lmdz.sh is done via the use of a dedicated "install_xios.bash" script available here: https://web.lmd.jussieu.fr/~lmdz/pub/script_install/install_xios.bash , which could also be used in a standalone installation (run ''install_xios.bash -h'' and/or inspect the script).
== Prerequisites ==
There are a couple of prerequisites to installing and using the XIOS library:
# An MPI library must be available
# A NetCDF4-HDF5 library, preferably compiled with MPI enabled, must be available
The rest of this page assume all prerequisites are met. People interested in building an appropriate NetCDF library on their Linux machine might be interested in the following installation script: https://web.lmd.jussieu.fr/~lmdz/pub/script_install/install_netcdf4_hdf5.bash (which might need some adaptations to work in your specific case).
== Downloading and compiling the XIOS library ==
The XIOS source code is available for download using svn (subversion), e.g.:
<syntaxhighlight lang="bash">
svn co http://forge.ipsl.jussieu.fr/ioserver/svn/XIOS/trunk XIOS
</syntaxhighlight>
* To compile the library, one must first have adequate architecture "arch" files at hand, just like for the GCM (see the [[WhatIs:_The_target_architecture_("arch")_files|page about these)]]). In principle both ''arch.env'' and ''arch.path'' files could be the same as for the GCM; ''arch.fcm'' will of course differ, as XIOS source code is in C++ (along with a Fortran interface). If using a "known" machine (e.g. Occigen, Irene-Rome, Ciclad) then ready-to-use up-to-date arch files for that machine should be present in the ''arch'' directory. If not you will have to create your own (it is advised to use the existing ones as templates!)
* Assuming ''some_machine'' arch files (i.e. files ''arch-some_machine.env'', ''arch-some_machine.path'', ''arch-some_machine.fcm'') are present in the '''arch''' subdirectory, compiling the XIOS is done using the dedicated ''make_xios'' script, e.g.:
<syntaxhighlight lang="bash">
./make_xios --prod --arch some_machine --job 8
</syntaxhighlight>
If the compilation steps went well then the '''lib''' directory should contain file ''libxios.a'' and the '''bin''' directory should contain
<pre>
fcm_env.ksh generic_testcase.exe xios_server.exe
</pre>
== Compiling LMDZ6 with the XIOS library ==
To compile with XIOS enabled, one must specify the option
<syntaxhighlight lang="bash">
-io xios
</syntaxhighlight>
to the [[WhatIs: The makelmdz fcm script|makelmdz_fcm]] script.
05/08/2022
[[Category:HowTo]]
[[Category:Xios]]
afa660248b820deb7611eff1e3bbd740cca49bbb
Strataer
0
205
425
2023-11-22T13:29:51Z
Lguez
4
Page créée avec « StratAer (anciennement S3A) est un modèle de chimie stratosphérique des aérosols du soufre. En gros il prend des sources de soufre en entrée (climatologie plus injecti... »
wikitext
text/x-wiki
StratAer (anciennement S3A) est un modèle de chimie stratosphérique des aérosols du soufre. En gros il prend des sources de soufre en entrée (climatologie plus injection) et calcule la chimie du soufre pour former des aérosols soufrés, répartis en plusieurs tailles (bin), qui vont être transportées, former d’autres molécules jusqu’à sédimenter. Les propriétés optiques de ces aérosols sont calculées au passage, ainsi que d’autres diagnotics.
En entrée on a un fichier avec les climatologies sur une période des précurseurs des aérosols OCS, SO2 et H2SO5 + leur durée de vie moyenne (générées avec un modèle de chimie complète). Ceci permet d’avoir un niveau de fond des aérosols. Ensuite on peut, via le fichier physiq.def, définir des injections de soufre à certaines dates pour représenter des éruptions volcaniques ou des shoots induits par géo-ingénérie. StratAer calcule les réactions chimiques induites et génère les aérosols jusqu’à leur sédimentation.
d40c0b77d3fa13cc2e519a2e4c3de71df989784b
426
425
2023-11-22T13:30:53Z
Lguez
4
wikitext
text/x-wiki
StratAer (anciennement S3A) est un modèle de chimie stratosphérique des aérosols du soufre. En gros il prend des sources de soufre en entrée (climatologie plus injection) et calcule la chimie du soufre pour former des aérosols soufrés, répartis en plusieurs tailles (bin), qui vont être transportées, former d’autres molécules jusqu’à sédimenter. Les propriétés optiques de ces aérosols sont calculées au passage, ainsi que d’autres diagnotics.
En entrée on a un fichier avec les climatologies sur une période des précurseurs des aérosols OCS, SO2 et H2SO5 + leur durée de vie moyenne (générées avec un modèle de chimie complète). Ceci permet d’avoir un niveau de fond des aérosols. Ensuite on peut, via le fichier physiq.def, définir des injections de soufre à certaines dates pour représenter des éruptions volcaniques ou des shoots induits par géo-ingénérie. StratAer calcule les réactions chimiques induites et génère les aérosols jusqu’à leur sédimentation.
Le nombre et les bornes des classes d'aérosols en taille sont pilotables. C'est pourquoi la routine de calcul de Mie est internalisée à StratAer et non en pre-processing comme c'est le cas pour les aérosols troposphériques.
543b21c26e4ce3e009d81dac603f51f35fb0ed9a
427
426
2023-11-22T14:02:14Z
Lguez
4
wikitext
text/x-wiki
StratAer (anciennement S3A) est un modèle de chimie stratosphérique des aérosols du soufre. En gros il prend des sources de soufre en entrée (climatologie plus injection) et calcule la chimie du soufre pour former des aérosols soufrés, répartis en plusieurs tailles (bin), qui vont être transportées, former d’autres molécules jusqu’à sédimenter. Les propriétés optiques de ces aérosols sont calculées au passage, ainsi que d’autres diagnotics.
En entrée on a un fichier avec la climatologie des rapports de mélange dans l'air et des durées de vie des espèces OCS, SO2 et H2SO4. Cette climatologie est générée avec un modèle de chimie complète. Les espèces OCS, SO2 et H2SO4 sont des précurseurs des aérosols. Ceci permet d’avoir un niveau de fond des aérosols. Ensuite on peut, via le fichier physiq.def, définir des injections de soufre à certaines dates pour représenter des éruptions volcaniques ou des shoots induits par géo-ingénérie. StratAer calcule les réactions chimiques induites et génère les aérosols jusqu’à leur sédimentation.
Le nombre et les bornes des classes d'aérosols en taille sont pilotables. C'est pourquoi la routine de calcul de Mie est internalisée à StratAer et non en pre-processing comme c'est le cas pour les aérosols troposphériques.
9a4f39ff910ba3269e5703875e879c27a3a16572
428
427
2023-11-22T14:03:04Z
Lguez
4
wikitext
text/x-wiki
StratAer (anciennement S3A) est un modèle de chimie stratosphérique des aérosols soufrés. En gros il prend des sources de soufre en entrée (climatologie plus injection) et calcule la chimie du soufre pour former des aérosols soufrés, répartis en plusieurs tailles (bin), qui vont être transportées, former d’autres molécules jusqu’à sédimenter. Les propriétés optiques de ces aérosols sont calculées au passage, ainsi que d’autres diagnotics.
En entrée on a un fichier avec la climatologie des rapports de mélange dans l'air et des durées de vie des espèces OCS, SO2 et H2SO4. Cette climatologie est générée avec un modèle de chimie complète. Les espèces OCS, SO2 et H2SO4 sont des précurseurs des aérosols. Ceci permet d’avoir un niveau de fond des aérosols. Ensuite on peut, via le fichier physiq.def, définir des injections de soufre à certaines dates pour représenter des éruptions volcaniques ou des shoots induits par géo-ingénérie. StratAer calcule les réactions chimiques induites et génère les aérosols jusqu’à leur sédimentation.
Le nombre et les bornes des classes d'aérosols en taille sont pilotables. C'est pourquoi la routine de calcul de Mie est internalisée à StratAer et non en pre-processing comme c'est le cas pour les aérosols troposphériques.
da30b9a2aabdf94347e40e46a7176d01b022b7d1
429
428
2023-11-22T14:06:49Z
Lguez
4
wikitext
text/x-wiki
StratAer (anciennement S3A) est un modèle de chimie stratosphérique des aérosols soufrés. En gros il prend des sources de soufre en entrée (climatologie plus injection) et calcule la chimie du soufre pour former des aérosols soufrés, répartis en plusieurs tailles (bin), qui vont être transportées, former d’autres molécules jusqu’à sédimenter. Les propriétés optiques de ces aérosols sont calculées au passage, ainsi que d’autres diagnotics.
En entrée on a un fichier avec la climatologie des rapports de mélange dans l'air et des durées de vie des espèces OCS, SO2 et H2SO4. Cette climatologie est générée avec un modèle de chimie complète. Les espèces OCS, SO2 et H2SO4 sont des précurseurs des aérosols. À partir de cette climatologie, Strataer calcule un niveau de fond des aérosols.
En outre, on peut, via le fichier <code>physiq.def</code>, définir des injections de soufre à certaines dates pour représenter des éruptions volcaniques ou des shoots induits par géo-ingénérie. StratAer calcule les réactions chimiques induites et génère les aérosols jusqu’à leur sédimentation.
Le nombre et les bornes des classes d'aérosols en taille sont pilotables. C'est pourquoi la routine de calcul de Mie est internalisée à StratAer et non en pre-processing comme c'est le cas pour les aérosols troposphériques.
e6d2fec89a713217de6896a8dbded9871cd80a1a
430
429
2023-11-22T14:07:25Z
Lguez
4
wikitext
text/x-wiki
StratAer (anciennement S3A) est un modèle de chimie stratosphérique des aérosols soufrés. En gros il prend des sources de soufre en entrée (climatologie plus injection) et calcule la chimie du soufre pour former des aérosols soufrés, répartis en plusieurs tailles (bin), qui vont être transportées, former d’autres molécules jusqu’à sédimenter. Les propriétés optiques de ces aérosols sont calculées au passage, ainsi que d’autres diagnotics.
En entrée on a un fichier avec la climatologie des rapports de mélange dans l'air et des durées de vie des espèces OCS, SO2 et H2SO4. Cette climatologie est générée avec un modèle de chimie complète. Les espèces OCS, SO2 et H2SO4 sont des précurseurs des aérosols. À partir de cette climatologie, Strataer calcule un niveau de fond des aérosols.
En outre, on peut, via le fichier <code>physiq.def</code>, définir des injections de soufre à certaines dates pour représenter des éruptions volcaniques ou des shoots induits par géo-ingénérie. StratAer calcule les réactions chimiques induites et génère les aérosols jusqu’à leur sédimentation.
Le nombre et les bornes des classes de taille d'aérosols sont pilotables. C'est pourquoi la routine de calcul de Mie est internalisée à StratAer et non en pre-processing comme c'est le cas pour les aérosols troposphériques.
3af2bc1947edb8df14580f1ae110487620541b7a
431
430
2023-11-22T14:16:19Z
Lguez
4
wikitext
text/x-wiki
StratAer (anciennement S3A) est un modèle de chimie stratosphérique des aérosols soufrés. En gros il prend des sources de soufre en entrée (climatologie plus injection) et calcule la chimie du soufre pour former des aérosols soufrés, répartis en plusieurs tailles (bin), qui vont être transportées, former d’autres molécules jusqu’à sédimenter. Les propriétés optiques de ces aérosols sont calculées au passage, ainsi que d’autres diagnostics.
En entrée on a un fichier avec la climatologie des rapports de mélange dans l'air et des durées de vie des espèces OCS, SO2 et H2SO4. Cette climatologie est générée avec un modèle de chimie complète. Les espèces OCS, SO2 et H2SO4 sont des précurseurs des aérosols. À partir de cette climatologie, Strataer calcule un niveau de fond des aérosols.
En outre, on peut, via le fichier <code>physiq.def</code>, définir des injections de soufre à certaines dates pour représenter des éruptions volcaniques ou des shoots induits par géo-ingénérie. StratAer calcule les réactions chimiques induites et génère les aérosols jusqu’à leur sédimentation.
Le nombre et les bornes des classes de taille d'aérosols sont pilotables. C'est pourquoi la routine de calcul de Mie est internalisée à StratAer et non en pre-processing comme c'est le cas pour les aérosols troposphériques.
32ce878da3509f14a7fd07f995e92c474011ff3a
432
431
2023-11-22T14:38:09Z
Lguez
4
wikitext
text/x-wiki
StratAer (anciennement S3A) est un modèle de chimie stratosphérique des aérosols soufrés. En gros il prend des sources de soufre en entrée (climatologie plus injection) et calcule la chimie du soufre pour former des aérosols soufrés, répartis en plusieurs tailles (bin), qui vont être transportées, former d’autres molécules jusqu’à sédimenter. Les propriétés optiques de ces aérosols sont calculées au passage, ainsi que d’autres diagnostics.
En entrée on a un fichier avec la climatologie des rapports de mélange dans l'air et des durées de vie des espèces OCS, SO2 et H2SO4. Cette climatologie est générée avec un modèle de chimie complète. Les espèces OCS, SO2 et H2SO4 sont des précurseurs des aérosols. À partir de cette climatologie, Strataer calcule un niveau de fond des aérosols.
En outre, on peut, via le fichier <code>physiq.def</code>, définir des injections de soufre à certaines dates pour représenter des éruptions volcaniques ou des shoots induits par géo-ingénérie. StratAer calcule les réactions chimiques induites et génère les aérosols jusqu’à leur sédimentation.
Le nombre et les bornes des classes de taille d'aérosols sont pilotables. C'est pourquoi la routine de calcul de Mie est internalisée à StratAer et non en pre-processing comme c'est le cas pour les aérosols troposphériques.
Mots-clefs : aérosol, aerosol
e001fb72f3cb11d18e7217aa97b7e42ec734c030
433
432
2023-11-22T14:53:49Z
Lguez
4
wikitext
text/x-wiki
StratAer (anciennement S3A) est un modèle de chimie stratosphérique des aérosols soufrés. En gros il prend des sources de soufre en entrée (climatologie plus injection) et calcule la chimie du soufre pour former des aérosols soufrés, répartis en plusieurs tailles (bin), qui vont être transportées, former d’autres molécules jusqu’à sédimenter. Les propriétés optiques de ces aérosols sont calculées au passage, ainsi que d’autres diagnostics. Les aérosols générés par Strataer sont intégrés comme des traceurs dans LMDZ : ils passent par les routines de LMDZ pour la convection, le lessivage, etc.
En entrée on a un fichier avec la climatologie des rapports de mélange dans l'air et des durées de vie des espèces OCS, SO2 et H2SO4. Cette climatologie est générée avec un modèle de chimie complète. Les espèces OCS, SO2 et H2SO4 sont des précurseurs des aérosols. À partir de cette climatologie, Strataer calcule un niveau de fond des aérosols.
En outre, on peut, via le fichier <code>physiq.def</code>, définir des injections de soufre à certaines dates pour représenter des éruptions volcaniques ou des shoots induits par géo-ingénérie. StratAer calcule les réactions chimiques induites et génère les aérosols jusqu’à leur sédimentation.
Le nombre et les bornes des classes de taille d'aérosols sont pilotables. C'est pourquoi la routine de calcul de Mie est internalisée à StratAer et non en pre-processing comme c'est le cas pour les aérosols troposphériques.
Références :
https://doi.org/10.5194/gmd-10-3359-2017
https://doi.org/10.5194/acp-21-3317-2021
Mots-clefs : aérosol, aerosol
be89f5ef49b891cef34310c26163079e1450dffa
434
433
2023-11-22T14:54:38Z
Lguez
4
wikitext
text/x-wiki
StratAer (anciennement S3A) est un modèle de chimie stratosphérique des aérosols soufrés. En gros il prend des sources de soufre en entrée (climatologie plus injection) et calcule la chimie du soufre pour former des aérosols soufrés, répartis en plusieurs tailles (bin), qui vont être transportées, former d’autres molécules jusqu’à sédimenter. Les propriétés optiques de ces aérosols sont calculées au passage, ainsi que d’autres diagnostics. Les aérosols générés par Strataer sont intégrés comme des traceurs dans LMDZ : ils passent par les routines de LMDZ pour la convection, le lessivage, etc.
En entrée on a un fichier avec la climatologie des rapports de mélange dans l'air et des durées de vie des espèces OCS, SO2 et H2SO4. Cette climatologie est générée avec un modèle de chimie complète. Les espèces OCS, SO2 et H2SO4 sont des précurseurs des aérosols. À partir de cette climatologie, Strataer calcule un niveau de fond des aérosols.
En outre, on peut, via le fichier <code>physiq.def</code>, définir des injections de soufre à certaines dates pour représenter des éruptions volcaniques ou des shoots induits par géo-ingénérie. StratAer calcule les réactions chimiques induites et génère les aérosols jusqu’à leur sédimentation.
Le nombre et les bornes des classes de taille d'aérosols sont pilotables. C'est pourquoi la routine de calcul de Mie est internalisée à StratAer et non en pre-processing comme c'est le cas pour les aérosols troposphériques.
Références :
- https://doi.org/10.5194/gmd-10-3359-2017
- https://doi.org/10.5194/acp-21-3317-2021
Mots-clefs : aérosol, aerosol
b4f96887153b5544a494355d881ae9aa91624cf5
435
434
2023-11-22T14:55:52Z
Lguez
4
wikitext
text/x-wiki
StratAer (anciennement S3A) est un modèle de chimie stratosphérique des aérosols soufrés. En gros il prend des sources de soufre en entrée (climatologie plus injection) et calcule la chimie du soufre pour former des aérosols soufrés, répartis en plusieurs tailles (bin), qui vont être transportées, former d’autres molécules jusqu’à sédimenter. Les propriétés optiques de ces aérosols sont calculées au passage, ainsi que d’autres diagnostics. Les aérosols générés par Strataer sont intégrés comme des traceurs dans LMDZ : ils passent par les routines de LMDZ pour la convection, le lessivage, etc.
En entrée on a un fichier avec la climatologie des rapports de mélange dans l'air et des durées de vie des espèces OCS, SO2 et H2SO4. Cette climatologie est générée avec un modèle de chimie complète. Les espèces OCS, SO2 et H2SO4 sont des précurseurs des aérosols. À partir de cette climatologie, Strataer calcule un niveau de fond des aérosols.
En outre, on peut, via le fichier <code>physiq.def</code>, définir des injections de soufre à certaines dates pour représenter des éruptions volcaniques ou des shoots induits par géo-ingénérie. StratAer calcule les réactions chimiques induites et génère les aérosols jusqu’à leur sédimentation.
Le nombre et les bornes des classes de taille d'aérosols sont pilotables. C'est pourquoi la routine de calcul de Mie est internalisée à StratAer et non en pre-processing comme c'est le cas pour les aérosols troposphériques.
Références :
* https://doi.org/10.5194/gmd-10-3359-2017
* https://doi.org/10.5194/acp-21-3317-2021
Mots-clefs : aérosol, aerosol
0d7368f54a49d155e1fe935cbd237e09c3913e10
436
435
2023-11-22T15:13:17Z
Lguez
4
wikitext
text/x-wiki
StratAer (anciennement S3A) est un modèle de chimie stratosphérique des aérosols soufrés. En gros il prend des sources de soufre en entrée (climatologie plus injection) et calcule la chimie du soufre pour former des aérosols soufrés, répartis en plusieurs tailles (bin), qui vont être transportées, former d’autres molécules jusqu’à sédimenter. Les propriétés optiques de ces aérosols sont calculées au passage, ainsi que d’autres diagnostics. Les aérosols générés par Strataer sont intégrés comme des traceurs dans LMDZ : ils passent par les routines de LMDZ pour la convection, le lessivage, etc.
En entrée on a un fichier avec la climatologie des rapports de mélange dans l'air et des durées de vie des espèces OCS, SO2 et H2SO4. Cette climatologie est générée avec un modèle de chimie complète. Les espèces OCS, SO2 et H2SO4 sont des précurseurs des aérosols. À partir de cette climatologie, Strataer calcule un niveau de fond des aérosols.
En outre, on peut, via le fichier <code>physiq.def</code>, définir des injections de soufre à certaines dates pour représenter des éruptions volcaniques ou des shoots induits par géo-ingénérie. StratAer calcule les réactions chimiques induites et génère les aérosols jusqu’à leur sédimentation.
Le nombre et les bornes des classes de taille d'aérosols sont pilotables. C'est pourquoi la routine de calcul de Mie est internalisée à StratAer et non en pre-processing comme c'est le cas pour les aérosols troposphériques.
Références :
* https://doi.org/10.5194/gmd-10-3359-2017
* https://doi.org/10.5194/acp-21-3317-2021
Strataer est activé avec l'option <code>-strataer true</code> de <code>makelmdz_fcm<code/>.
Mots-clefs : aérosol, aerosol
d11420a546adf309d32c1f4860f698436df19a12
437
436
2023-11-22T15:13:35Z
Lguez
4
wikitext
text/x-wiki
StratAer (anciennement S3A) est un modèle de chimie stratosphérique des aérosols soufrés. En gros il prend des sources de soufre en entrée (climatologie plus injection) et calcule la chimie du soufre pour former des aérosols soufrés, répartis en plusieurs tailles (bin), qui vont être transportées, former d’autres molécules jusqu’à sédimenter. Les propriétés optiques de ces aérosols sont calculées au passage, ainsi que d’autres diagnostics. Les aérosols générés par Strataer sont intégrés comme des traceurs dans LMDZ : ils passent par les routines de LMDZ pour la convection, le lessivage, etc.
En entrée on a un fichier avec la climatologie des rapports de mélange dans l'air et des durées de vie des espèces OCS, SO2 et H2SO4. Cette climatologie est générée avec un modèle de chimie complète. Les espèces OCS, SO2 et H2SO4 sont des précurseurs des aérosols. À partir de cette climatologie, Strataer calcule un niveau de fond des aérosols.
En outre, on peut, via le fichier <code>physiq.def</code>, définir des injections de soufre à certaines dates pour représenter des éruptions volcaniques ou des shoots induits par géo-ingénérie. StratAer calcule les réactions chimiques induites et génère les aérosols jusqu’à leur sédimentation.
Le nombre et les bornes des classes de taille d'aérosols sont pilotables. C'est pourquoi la routine de calcul de Mie est internalisée à StratAer et non en pre-processing comme c'est le cas pour les aérosols troposphériques.
Références :
* https://doi.org/10.5194/gmd-10-3359-2017
* https://doi.org/10.5194/acp-21-3317-2021
Strataer est activé avec l'option <code>-strataer true</code> de <code>makelmdz_fcm</code>.
Mots-clefs : aérosol, aerosol
e3493c7d16e5636ced67b1c74976244c7e947940
439
437
2024-01-19T06:06:20Z
Lguez
4
wikitext
text/x-wiki
StratAer (anciennement S3A) est un modèle de chimie stratosphérique des aérosols soufrés. En gros il prend des sources de soufre en entrée (climatologie plus injection) et calcule la chimie du soufre pour former des aérosols soufrés, répartis en plusieurs tailles (bin), qui vont être transportées, former d’autres molécules jusqu’à sédimenter. Les propriétés optiques de ces aérosols sont calculées au passage, ainsi que d’autres diagnostics. Les aérosols générés par Strataer sont intégrés comme des traceurs dans LMDZ : ils passent par les routines de LMDZ pour la convection, le lessivage, etc.
En entrée on a un fichier avec la climatologie des rapports de mélange dans l'air et des durées de vie des espèces OCS, SO2 et H2SO4. Cette climatologie est générée avec un modèle de chimie complète. Les espèces OCS, SO2 et H2SO4 sont des précurseurs des aérosols. À partir de cette climatologie, Strataer calcule un niveau de fond des aérosols.
En outre, on peut, via le fichier <code>physiq.def</code>, définir des injections de soufre à certaines dates pour représenter des éruptions volcaniques ou des shoots induits par géo-ingénérie. StratAer calcule les réactions chimiques induites et génère les aérosols jusqu’à leur sédimentation.
Le nombre et les bornes des classes de taille d'aérosols sont pilotables. C'est pourquoi la routine de calcul de Mie est internalisée à StratAer et non en pre-processing comme c'est le cas pour les aérosols troposphériques.
Les aérosols générés par Strataer sont intégrés comme des traceurs dans LMDZ.
Références :
* https://doi.org/10.5194/gmd-10-3359-2017
* https://doi.org/10.5194/acp-21-3317-2021
Strataer est activé avec l'option <code>-strataer true</code> de <code>makelmdz_fcm</code>.
Mots-clefs : aérosol, aerosol
b1672665be1679885d36d110736c92328d732e15
440
439
2024-01-19T14:33:08Z
Lguez
4
wikitext
text/x-wiki
StratAer (anciennement S3A) est un modèle de chimie stratosphérique des aérosols soufrés. En gros il prend des sources de soufre en entrée (climatologie plus injection) et calcule la chimie du soufre pour former des aérosols soufrés, répartis en plusieurs tailles (bin), qui vont être transportées, former d’autres molécules jusqu’à sédimenter. Les propriétés optiques de ces aérosols sont calculées au passage, ainsi que d’autres diagnostics. Les aérosols générés par Strataer sont intégrés comme des traceurs dans LMDZ : ils passent par les routines de LMDZ pour la convection, le lessivage, etc.
En entrée on a un fichier avec la climatologie des rapports de mélange dans l'air et des durées de vie des espèces OCS, SO2 et H2SO4. Cette climatologie est générée avec un modèle de chimie complète. Les espèces OCS, SO2 et H2SO4 sont des précurseurs des aérosols. À partir de cette climatologie, Strataer calcule un niveau de fond des aérosols.
En outre, on peut, via le fichier <code>physiq.def</code>, définir des injections de soufre à certaines dates pour représenter des éruptions volcaniques ou des shoots induits par géo-ingénérie. StratAer calcule les réactions chimiques induites et génère les aérosols jusqu’à leur sédimentation.
Le nombre et les bornes des classes de taille d'aérosols sont pilotables. C'est pourquoi la routine de calcul de Mie est internalisée à StratAer et non en pre-processing comme c'est le cas pour les aérosols troposphériques.
Les aérosols générés par Strataer sont intégrés comme des traceurs dans LMDZ.
Une exécution de LMDZ avec Strataer peut partir de fichiers restart d'une exécution sans Strataer.
Références :
* https://doi.org/10.5194/gmd-10-3359-2017
* https://doi.org/10.5194/acp-21-3317-2021
Strataer est activé avec l'option <code>-strataer true</code> de <code>makelmdz_fcm</code>.
Mots-clefs : aérosol, aerosol
98efaa1d17b9164956f424cf4ba54079b72ee73e
443
440
2024-04-10T17:46:23Z
Lguez
4
wikitext
text/x-wiki
StratAer (anciennement S3A) est un modèle de chimie stratosphérique des aérosols soufrés. En gros il prend des sources de soufre en entrée (climatologie plus injection) et calcule la chimie du soufre pour former des aérosols soufrés, répartis en plusieurs tailles (bin), qui vont être transportés, former d’autres molécules jusqu’à sédimenter. Les propriétés optiques de ces aérosols sont calculées au passage, ainsi que d’autres diagnostics. Les aérosols générés par Strataer sont intégrés comme des traceurs dans LMDZ : ils passent par les routines de LMDZ pour la convection, le lessivage, etc.
En entrée on a un fichier avec la climatologie des rapports de mélange dans l'air et des durées de vie des espèces OCS, SO2 et H2SO4. Cette climatologie est générée avec un modèle de chimie complète. Les espèces OCS, SO2 et H2SO4 sont des précurseurs des aérosols. À partir de cette climatologie, Strataer calcule un niveau de fond des aérosols.
En outre, on peut, via le fichier <code>physiq.def</code>, définir des injections de soufre à certaines dates pour représenter des éruptions volcaniques ou des shoots induits par géo-ingénérie. StratAer calcule les réactions chimiques induites et génère les aérosols jusqu’à leur sédimentation.
Le nombre et les bornes des classes de taille d'aérosols sont pilotables. C'est pourquoi la routine de calcul de Mie est internalisée à StratAer et non en pre-processing comme c'est le cas pour les aérosols troposphériques.
Les aérosols générés par Strataer sont intégrés comme des traceurs dans LMDZ.
Une exécution de LMDZ avec Strataer peut partir de fichiers restart d'une exécution sans Strataer.
Références :
* https://doi.org/10.5194/gmd-10-3359-2017
* https://doi.org/10.5194/acp-21-3317-2021
Strataer est activé avec l'option <code>-strataer true</code> de <code>makelmdz_fcm</code>.
Mots-clefs : aérosol, aerosol
163b8afe6b0e4306225e12e89a2198ac9d00f1f5
444
443
2024-04-10T17:47:49Z
Lguez
4
wikitext
text/x-wiki
StratAer (anciennement S3A) est un modèle de chimie stratosphérique des aérosols soufrés. En gros il prend des sources de soufre en entrée (climatologie plus injection) et calcule la chimie du soufre pour former des aérosols soufrés, répartis en plusieurs tailles (bin), qui vont être transportés, former d’autres molécules jusqu’à sédimenter. Les propriétés optiques de ces aérosols sont calculées au passage, ainsi que d’autres diagnostics. Les aérosols générés par Strataer sont intégrés comme des traceurs dans LMDZ : ils passent par les routines de LMDZ pour la convection, le lessivage, etc.
En entrée on a un fichier avec la climatologie des rapports de mélange dans l'air et des durées de vie des espèces OCS, SO2 et H2SO4. Cette climatologie est générée avec un modèle de chimie complète. Les espèces OCS, SO2 et H2SO4 sont des précurseurs des aérosols. À partir de cette climatologie, Strataer calcule un niveau de fond des aérosols.
En outre, on peut, via le fichier <code>physiq.def</code>, définir des injections de soufre à certaines dates pour représenter des éruptions volcaniques ou des shoots induits par géo-ingénérie. StratAer calcule les réactions chimiques induites et génère les aérosols jusqu’à leur sédimentation.
Le nombre et les bornes des classes de taille d'aérosols sont pilotables. C'est pourquoi la routine de calcul de Mie est internalisée à StratAer et non en pre-processing comme c'est le cas pour les aérosols troposphériques.
Une exécution de LMDZ avec Strataer peut partir de fichiers restart d'une exécution sans Strataer.
Références :
* https://doi.org/10.5194/gmd-10-3359-2017
* https://doi.org/10.5194/acp-21-3317-2021
Strataer est activé avec l'option <code>-strataer true</code> de <code>makelmdz_fcm</code>.
Mots-clefs : aérosol, aerosol
671c649ce01b1296b55767a919f196349f8721ef
Howto: Run with the ORCHIDEE continental surface model
0
206
438
2024-01-03T16:23:13Z
Emillour
3
Page créée avec « == The ORCHIDEE continental surface model == This model is separate from LMDZ in the sense that it can be run on its own and that its source code is not included in the LM... »
wikitext
text/x-wiki
== The ORCHIDEE continental surface model ==
This model is separate from LMDZ in the sense that it can be run on its own and that its source code is not included in the LMDZ repository.
You can check out the official ORCHIDEE website here : https://orchidee.ipsl.fr/
=== Coupling with LMDZ ===
Coupling between LMDZ and ORCHIDEE is however implemented and merely requires that:
# The ORCHIDEE source code is available alongside the LMDZ directory (not mandatory but must match what is given in the arch.path file, see [[WhatIs: The target architecture ("arch") files]])
# The GCM must be compiled with the adequate "-v" option (see [[WhatIs: The makelmdz fcm script]]), i.e. "-v orchideetrunk" or "-v orchidee2.1" or "-v orchidee2.0" or "-v orchidee1.9"; use "makelmdz_fcm -h" to learn more about these)
# the "VEGET" parameter in config.def should be set to "y":
<pre>
VEGET=y
</pre>
Note that if "VEGET" is set to "n" then a simple bucket scheme will be used.
=== ORCHIDEE parameters ===
There are many! All usually grouped in a "orchidee.def" file
=== ORCHIDEE input and output files ===
...
03/01/2024
[[Category:HowTo]]
da149d66392286dccdb05b7340000d638a1ce3c3
Cible tuning glob.rt LMDZ amip
0
207
441
2024-03-25T16:24:06Z
Mcoulon
16
Page créée avec « == La métriques glob.rt == La métriques glob.rt c'est le rayonnement totale à TOA (rt) moyenné sur tout le globe (glob), utilisée lors du tuning de LMDZ en configura... »
wikitext
text/x-wiki
== La métriques glob.rt ==
La métriques glob.rt c'est le rayonnement totale à TOA (rt) moyenné sur tout le globe (glob), utilisée lors du tuning de LMDZ en configuration AMIP. C'est une métrique complètement différentes des autres, car la valeur moyenne visée et la tolérance ne correspondent pas à des observations. Pour résumer, je dirais que cette métrique à pour but de garantir des SSTs correcte lors du passage de LMDZ AMIP au modèle couplé (=LMDZ+NEMO). En gros, si on change de 1$$W/m^2$$ le glob.rt dans LMDZ, on change de 1°C la température de surface dans le modèle couplé.
=== Principe de "gregory" ===
Ce fameux gregory a montré, pour le système couplé (atmosphère + océan), que :
\begin{equation}
\Delta G = \Delta F + \eta \Delta T
\label{eq:greg}
\end{equation}
Avec :
* G : le rayonnement totale à TOA ($$W/m^2$$)
* $$\Delta F$$ : forçage ($$W/m^2$$)
* T : la température de surface du globe
* $$\eta$$ : constante
* $$\Delta$$ : écart avec une simulation de référence équilibrée
=== Appliqué a une expérience de doublement de CO2 ===
Si on prend l'exemple d'une expérience où l'on double la concentration de $$CO_2$$. On a d'une part une simulation de référence équilibrée (piControl) et une autre expérience où l'on double le $$CO_2$$.
Le $$\Delta$$ c'est donc l'écart entre ces deux simulations.
On trace $$\Delta G$$ vs $$\Delta T$$ pour chaque année de la simulation avec $$2$$x$$CO_2$$ et on obtient une droite (qui en pratique n'attent jamais ni le $$\Delta G = 0$$, ni le $$\Delta T$$ = 0).
Le $$\Delta F$$ est définie comme le désiquilibre énergetique au sommet de l'atmosphère ($$\Delta G$$) lorsque le modèle n'a pas encore eu le temps de changer sa température de surface $$\Delta T = 0$$ dans l'équation \ref{eq:greg}. En pratique cet état n'est jamais atteint, mais une extrapolation des points permet de l'évaluer.
Le $$\Delta T$$ lorsque le modèle est équilibré (c'est-à-dire lorsque $$\Delta G = 0$$) est l'augmentation de la température de surface du globe, suite au forçage radiatif $$\Delta F$$, lorsque le modèle c'est rééquilibré. Dans le cadre de cette expérienc de doublement de $$CO_2$$, le $$\Delta T$$ atteint lorsque le modèle est revenu à l'équilibre est l'ECS (Equilibrium Climate Sensibility).
On atteint jamais le $$\Delta G$$ car les modèles ne conservent pas l'énergie (perte de l'ordre de $$0.5$$ $$W/m^2$$).
Dans ce type d'expérience, les SSTs vont s'ajuster de manière exponentielle vers leur valeur d'équilibre, avec une constante de temps de l'ordre de $$20$$ à $$30$$ ans, ce qui correspondt à l'ajustement de l'océan de surface (première dizaine de mètres).
=== Appliqué aux expériences forcées vs couplées ===
De manière similaire, on prend comme référence une simulation équilibrée couplée ; mais cette fois réalisée en "present day" (pdControl). Notre simulation perturbée dans ce cadre c'est une simulation du même type mais avec une physique différente (des paramètres libres différents par exemple dans le cadre du tuning). Le $$\Delta$$ est alors l'écart entre ces deux simulations.
Si on fait les mêmes simulations en amip, on a (en gros) $$\Delta T_a = 0 $$ tout le temps car les SSTs sont imposées (on voit bien que ce n'est pas exactement vrai car il y a la température des continent qui rentre dans le $$\Delta T_a$$ et qui est libre en amip). Donc, si on applique l'équation \ref{eq:greg} avec $$\Delta T_a = 0 $$ on a $$\Delta F_a = \Delta G_a$$ (différent de zéro car en amip on n'équilibre par le bilan radiatif au sommet). La différence de forçage radiatif correspond à la différence de bilan au sommet de l'atmosphère.
On fait l'hypothèse que $$\Delta F_a = \Delta F_c$$. (avec $$\Delta F_c$$ la différence de forçage entre les deux simulations en couplé). Le changement de forçage (du au changement de configuration) entre les deux simulations en amip et en cmip sont les même. On a alors :
\begin{equation}
\Delta G_c = \Delta F_a + \eta \Delta T_c
\end{equation}
On veut conserver, en couplé et à l'équilibre, des SSTs qui ressemblent à la référence. On veut donc que $$\Delta T_c^{\infty} = 0 $$ avec $$\Delta G_c^{\infty} = 0$$. Donc on veut que $$\Delta F_a = 0$$ (le forçage ne dépend pas du temps).
==== Comment on arrive à la valeur de référence pour glob.rt ? ====
En pratique, on va donc évaluer une première fois (typiquement sur la configuration de référence) l'écart entre le $$G_c$$ à l'équilibre du couplé (bilan atmosphérique du couplé, nulle pour un modèle parfait mais en vrai il y a un déséquilibre d'énergie d'environ $$0.7$$ $$W/m^2$$) et le $$G_a$$ (le bilan énergétique de la configuration AMIP). Cette différence a été évaluée à $$2.7$$ $$W/m^2$$. Puisqu'à chaque changement de confgiguration (= de vecteur de paramètre libre pour le tuning) on veut que $$\Delta F_a = 0 $$ ; alors on va viser un $$G_a$$ à $$2.7$$ $$W/m^2$$. C'est de la que vient la valeur cible de glob.rt.
En pratique, on va donc évaluer une première fois (typiquement sur la configuration de référence) l'écart entre le $$G_c$$ à l'équilibre du couplé (bilan atmosphérique du couplé, nulle pour un modèle parfait mais en vrai il y a un déséquilibre d'énergie d'environ $$0.7$$ $$W/m^2$$) et le $$G_a$$ (le bilan énergétique de la configuration AMIP). Cette différence a été évaluée à $$2.7$$ $$W/m^2$$. Puisqu'à chaque changement de confgiguration (= de vecteur de paramètre libre pour le tuning) on veut que $$\Delta F_a = 0 $$ ; alors on va viser un $$G_a$$ à $$2.7$$ $$W/m^2$$. C'est de la que vient la valeur cible de glob.rt.
==== Utilisation d'abaque : ====
On atteint jamais exatement la valeur cible de glob.rt avec le tuning, même si on met une tolérance très petite. Pour corriger cette erreure et arriver exactement à $$2.7$$ $$W/m^2$$, on utilise un abaque de $$\Delta F$$ vs cld\_lc. cld\_lc est une paramètre libre qui représente le seuil à partir duquel l'eau nuageuse est converti en précipitation (dans le schéma de précipitation grande échelle) et est très fortement corrélée au rayonnement au sommet de l'atmosphère.
==== Choix de la tolérance à l'erreur que l'on se donne : ====
Comment determiner la tolérance que l'on met autour de la valeur de référence pour glob.rt ? On a un premier ensemble de simulation avec les paramètres libres perturbés, en amip et en couplé. On trace la forçage des simulations amip vs la SST moyenne sur 20 ans qui forment une droite avec une certaine variabilité autour. La tolérance est alors la variabilité de $$F$$ pour la bonne SST de référence, qui vaut environ $$1$$ $$W/m^2$$. Cette question de la tolérance reste une question.
On note que la SST de référence est celle entre $$50°N$$ et $$50°S$$ (pour éviter des problèmes d'observations près des pôles à cause de la banquise).
==== Qu'est ce qu'il y a dans ces $$2.7$$ $$W/m^2$$ ? ====
Déjà, ce $$2.7$$ $$W/m^2$$ n'est pas immuamble ou fixe. Dans le tuning actuel du modèle couplé, avec une nouvelle version de NEMO, cette valeur est beaucoup plus grande (autour de $$5$$ $$W/m^2$$ je crois, à vérifier). On considère que cette valeure, qui est donc l'écart entre le rayonnement totale à TOA d'une simulation couplée et d'une simulation amip, change peu lorsque l'on modifie les paramètres libres lors de l'exercice de tuning. Cette hypothèse était très vérifiée lors d'exercice de tuning à la main (car petites variation de paramètres), mais l'est potentiellement moins quand on tune avec Hightune explorer car on va visiter de vaste région de paramètre libre. \textbf{Il faut garder en tête que quand la configuration du modèle change beaucoup il faut réévaluer la valeur de référence de glob.rt
La différence majeure entre les simulations amip et couplé est la position des jets ; qui se rapprochent de l'équateur en couplé. Cela créé plus de nuages dans les régions tropicales (qui sont en amip un peu plus au nord) qui renvoient donc plus de rayonnement vers l'atmosphère (car dans des régions avec plus de rayonnement incident). Cette variation de la position de jet entraine un climat plus froid en couplé qu'en amip. Il a été montré que ce biais sur la position des jets était du (que ce soit en amip ou en couplé) à la résolution du modèle. Lorsque l'on impose les SSTs (en amip) on réduit ce biais car les jets sont liés aux gradients de température.
D'autres choses peuvent expliquer cette différence de rayonnement TOA entre amip et couplé : les patterns de SST, la banquise (et j'oublie peut-être d'autre chose). Cette question est actuellement abordée par l'équipe qui fait le tuning du modèle couplé.
== Point sur les protocoles de controle ==
On a deux protocoles de controle, le controle pré-industriel (piControl) et le controle "present day" (pdControl).
Pour faire le controle pré-industriel on fait des milliers d'années de simulations couplé avec les forçages pré-industriel.
Pour faire le controle "present day" on fait aussi des milliers d'années de simulations couplé avec les forçages présents, sauf qu'actuellement on a un déséquilibre au sommet de l'atmosphère $$G = -0.8$$ $$W/m^2$$ du au fait que l'océan absorbe une partie du forçage radiatif anthropique (ocean heat uptake). Si le modèle était parfait (pas de fuite d'énergie) on aurait donc un climat de $$0.8^\circ C$$ trop chaud. Pour faire en sorte qu'à l'équilibre ($$G_c=0$$) on soit à la bonne température, on booste l'albédo de l'océan d'environ $$10\%$$. On pourrait aussi changer la constante solaire ; mais l'avantage en boostant l'albedo de l'océan c'est que ça se passe au même endroit où la chaleur est prise en vrai par l'océan. Par contre, on prend pas en compte la répartitution latitudinale des changements.
On choisit de faire le tuning avec des protocoles present day et pas pré-industriel pour plusieurs raisons. Déjà on a beaucoup plus d'observations. En plus on est sur que en partant du pre-industriel (avec un modèle tuné au present day) on va bien passer par la température actuelle lors des protocoles de changement climatiques. Si on tune au pre-industriel, la température actuelle simulée par le modèle va dépendre de sa sensibilité climatique.
49a1064378401e0271cf14468455573bfec1a670
442
441
2024-03-25T16:24:27Z
Mcoulon
16
wikitext
text/x-wiki
== La métriques glob.rt ==
La métriques glob.rt c'est le rayonnement totale à TOA (rt) moyenné sur tout le globe (glob), utilisée lors du tuning de LMDZ en configuration AMIP. C'est une métrique complètement différentes des autres, car la valeur moyenne visée et la tolérance ne correspondent pas à des observations. Pour résumer, je dirais que cette métrique à pour but de garantir des SSTs correcte lors du passage de LMDZ AMIP au modèle couplé (=LMDZ+NEMO). En gros, si on change de 1$$W/m^2$$ le glob.rt dans LMDZ, on change de 1°C la température de surface dans le modèle couplé.
=== Principe de "gregory" ===
Ce fameux gregory a montré, pour le système couplé (atmosphère + océan), que :
\begin{equation}
\Delta G = \Delta F + \eta \Delta T
\label{eq:greg}
\end{equation}
Avec :
* G : le rayonnement totale à TOA ($$W/m^2$$)
* $$\Delta F$$ : forçage ($$W/m^2$$)
* T : la température de surface du globe
* $$\eta$$ : constante
* $$\Delta$$ : écart avec une simulation de référence équilibrée
=== Appliqué a une expérience de doublement de CO2 ===
Si on prend l'exemple d'une expérience où l'on double la concentration de $$CO_2$$. On a d'une part une simulation de référence équilibrée (piControl) et une autre expérience où l'on double le $$CO_2$$.
Le $$\Delta$$ c'est donc l'écart entre ces deux simulations.
On trace $$\Delta G$$ vs $$\Delta T$$ pour chaque année de la simulation avec $$2$$x$$CO_2$$ et on obtient une droite (qui en pratique n'attent jamais ni le $$\Delta G = 0$$, ni le $$\Delta T$$ = 0).
Le $$\Delta F$$ est définie comme le désiquilibre énergetique au sommet de l'atmosphère ($$\Delta G$$) lorsque le modèle n'a pas encore eu le temps de changer sa température de surface $$\Delta T = 0$$ dans l'équation \ref{eq:greg}. En pratique cet état n'est jamais atteint, mais une extrapolation des points permet de l'évaluer.
Le $$\Delta T$$ lorsque le modèle est équilibré (c'est-à-dire lorsque $$\Delta G = 0$$) est l'augmentation de la température de surface du globe, suite au forçage radiatif $$\Delta F$$, lorsque le modèle c'est rééquilibré. Dans le cadre de cette expérienc de doublement de $$CO_2$$, le $$\Delta T$$ atteint lorsque le modèle est revenu à l'équilibre est l'ECS (Equilibrium Climate Sensibility).
On atteint jamais le $$\Delta G$$ car les modèles ne conservent pas l'énergie (perte de l'ordre de $$0.5$$ $$W/m^2$$).
Dans ce type d'expérience, les SSTs vont s'ajuster de manière exponentielle vers leur valeur d'équilibre, avec une constante de temps de l'ordre de $$20$$ à $$30$$ ans, ce qui correspondt à l'ajustement de l'océan de surface (première dizaine de mètres).
=== Appliqué aux expériences forcées vs couplées ===
De manière similaire, on prend comme référence une simulation équilibrée couplée ; mais cette fois réalisée en "present day" (pdControl). Notre simulation perturbée dans ce cadre c'est une simulation du même type mais avec une physique différente (des paramètres libres différents par exemple dans le cadre du tuning). Le $$\Delta$$ est alors l'écart entre ces deux simulations.
Si on fait les mêmes simulations en amip, on a (en gros) $$\Delta T_a = 0 $$ tout le temps car les SSTs sont imposées (on voit bien que ce n'est pas exactement vrai car il y a la température des continent qui rentre dans le $$\Delta T_a$$ et qui est libre en amip). Donc, si on applique l'équation \ref{eq:greg} avec $$\Delta T_a = 0 $$ on a $$\Delta F_a = \Delta G_a$$ (différent de zéro car en amip on n'équilibre par le bilan radiatif au sommet). La différence de forçage radiatif correspond à la différence de bilan au sommet de l'atmosphère.
On fait l'hypothèse que $$\Delta F_a = \Delta F_c$$. (avec $$\Delta F_c$$ la différence de forçage entre les deux simulations en couplé). Le changement de forçage (du au changement de configuration) entre les deux simulations en amip et en cmip sont les même. On a alors :
\begin{equation}
\Delta G_c = \Delta F_a + \eta \Delta T_c
\end{equation}
On veut conserver, en couplé et à l'équilibre, des SSTs qui ressemblent à la référence. On veut donc que $$\Delta T_c^{\infty} = 0 $$ avec $$\Delta G_c^{\infty} = 0$$. Donc on veut que $$\Delta F_a = 0$$ (le forçage ne dépend pas du temps).
==== Comment on arrive à la valeur de référence pour glob.rt ? ====
En pratique, on va donc évaluer une première fois (typiquement sur la configuration de référence) l'écart entre le $$G_c$$ à l'équilibre du couplé (bilan atmosphérique du couplé, nulle pour un modèle parfait mais en vrai il y a un déséquilibre d'énergie d'environ $$0.7$$ $$W/m^2$$) et le $$G_a$$ (le bilan énergétique de la configuration AMIP). Cette différence a été évaluée à $$2.7$$ $$W/m^2$$. Puisqu'à chaque changement de confgiguration (= de vecteur de paramètre libre pour le tuning) on veut que $$\Delta F_a = 0 $$ ; alors on va viser un $$G_a$$ à $$2.7$$ $$W/m^2$$. C'est de la que vient la valeur cible de glob.rt.
En pratique, on va donc évaluer une première fois (typiquement sur la configuration de référence) l'écart entre le $$G_c$$ à l'équilibre du couplé (bilan atmosphérique du couplé, nulle pour un modèle parfait mais en vrai il y a un déséquilibre d'énergie d'environ $$0.7$$ $$W/m^2$$) et le $$G_a$$ (le bilan énergétique de la configuration AMIP). Cette différence a été évaluée à $$2.7$$ $$W/m^2$$. Puisqu'à chaque changement de confgiguration (= de vecteur de paramètre libre pour le tuning) on veut que $$\Delta F_a = 0 $$ ; alors on va viser un $$G_a$$ à $$2.7$$ $$W/m^2$$. C'est de la que vient la valeur cible de glob.rt.
==== Utilisation d'abaque : ====
On atteint jamais exatement la valeur cible de glob.rt avec le tuning, même si on met une tolérance très petite. Pour corriger cette erreure et arriver exactement à $$2.7$$ $$W/m^2$$, on utilise un abaque de $$\Delta F$$ vs cld\_lc. cld\_lc est une paramètre libre qui représente le seuil à partir duquel l'eau nuageuse est converti en précipitation (dans le schéma de précipitation grande échelle) et est très fortement corrélée au rayonnement au sommet de l'atmosphère.
==== Choix de la tolérance à l'erreur que l'on se donne : ====
Comment determiner la tolérance que l'on met autour de la valeur de référence pour glob.rt ? On a un premier ensemble de simulation avec les paramètres libres perturbés, en amip et en couplé. On trace la forçage des simulations amip vs la SST moyenne sur 20 ans qui forment une droite avec une certaine variabilité autour. La tolérance est alors la variabilité de $$F$$ pour la bonne SST de référence, qui vaut environ $$1$$ $$W/m^2$$. Cette question de la tolérance reste une question.
On note que la SST de référence est celle entre $$50°N$$ et $$50°S$$ (pour éviter des problèmes d'observations près des pôles à cause de la banquise).
==== Qu'est ce qu'il y a dans ces $$2.7$$ $$W/m^2$$ ? ====
Déjà, ce $$2.7$$ $$W/m^2$$ n'est pas immuamble ou fixe. Dans le tuning actuel du modèle couplé, avec une nouvelle version de NEMO, cette valeur est beaucoup plus grande (autour de $$5$$ $$W/m^2$$ je crois, à vérifier). On considère que cette valeure, qui est donc l'écart entre le rayonnement totale à TOA d'une simulation couplée et d'une simulation amip, change peu lorsque l'on modifie les paramètres libres lors de l'exercice de tuning. Cette hypothèse était très vérifiée lors d'exercice de tuning à la main (car petites variation de paramètres), mais l'est potentiellement moins quand on tune avec Hightune explorer car on va visiter de vaste région de paramètre libre. Il faut garder en tête que quand la configuration du modèle change beaucoup il faut réévaluer la valeur de référence de glob.rt
La différence majeure entre les simulations amip et couplé est la position des jets ; qui se rapprochent de l'équateur en couplé. Cela créé plus de nuages dans les régions tropicales (qui sont en amip un peu plus au nord) qui renvoient donc plus de rayonnement vers l'atmosphère (car dans des régions avec plus de rayonnement incident). Cette variation de la position de jet entraine un climat plus froid en couplé qu'en amip. Il a été montré que ce biais sur la position des jets était du (que ce soit en amip ou en couplé) à la résolution du modèle. Lorsque l'on impose les SSTs (en amip) on réduit ce biais car les jets sont liés aux gradients de température.
D'autres choses peuvent expliquer cette différence de rayonnement TOA entre amip et couplé : les patterns de SST, la banquise (et j'oublie peut-être d'autre chose). Cette question est actuellement abordée par l'équipe qui fait le tuning du modèle couplé.
== Point sur les protocoles de controle ==
On a deux protocoles de controle, le controle pré-industriel (piControl) et le controle "present day" (pdControl).
Pour faire le controle pré-industriel on fait des milliers d'années de simulations couplé avec les forçages pré-industriel.
Pour faire le controle "present day" on fait aussi des milliers d'années de simulations couplé avec les forçages présents, sauf qu'actuellement on a un déséquilibre au sommet de l'atmosphère $$G = -0.8$$ $$W/m^2$$ du au fait que l'océan absorbe une partie du forçage radiatif anthropique (ocean heat uptake). Si le modèle était parfait (pas de fuite d'énergie) on aurait donc un climat de $$0.8^\circ C$$ trop chaud. Pour faire en sorte qu'à l'équilibre ($$G_c=0$$) on soit à la bonne température, on booste l'albédo de l'océan d'environ $$10\%$$. On pourrait aussi changer la constante solaire ; mais l'avantage en boostant l'albedo de l'océan c'est que ça se passe au même endroit où la chaleur est prise en vrai par l'océan. Par contre, on prend pas en compte la répartitution latitudinale des changements.
On choisit de faire le tuning avec des protocoles present day et pas pré-industriel pour plusieurs raisons. Déjà on a beaucoup plus d'observations. En plus on est sur que en partant du pre-industriel (avec un modèle tuné au present day) on va bien passer par la température actuelle lors des protocoles de changement climatiques. Si on tune au pre-industriel, la température actuelle simulée par le modèle va dépendre de sa sensibilité climatique.
b33ba618cf33c7297a1ece74c6d78b85f658081f